【JAVASCRIPT】Javascript( typescript )Chrome擴充套件程式,功能回撥是否如願?

2020-12-03 JAVASCRIPT

對於這樣的程式碼

let anotherFolder='whatever';
let anotherFolder2='whatever';

chrome.bookmarks.create( {title:'whatever2'}, function( parentFolder ) {
  chrome.bookmarks.move( anotherFolder, {parentId: parentFolder.id}, function() {
    chrome.bookmarks.removeTree( anotherFolder2, function() {
      resolve();
    });
  });
});

我可以將其轉換為鏈式功能嗎?就像是
let anotherFolder='whatever';
let anotherFolder2='whatever';

return new Promise(function(resolve){
  chrome.bookmarks.create( {title:'whatever2'}, function( parentFolder ) {
    resolve(parentFolder);
  }).then( (parentFolder) => {
    chrome.bookmarks.move( anotherFolder, {parentId: parentFolder.id}, function() {
      resolve();
    })
  }).then () => {
    chrome.bookmarks.removeTree( anotherFolder2, function() {
      resolve();
    });
  });
});

因為我得到“屬性”的錯誤,然後型別“void”不存在。

*這是javascript型別的指令碼,但這裡沒關係(?)

解決辦法

您需要“ promise ”任何chrome.bookmarks.*函式-順便說一句,這使其與Firefox和(最終)Edge Web Extensions中的browser.bookmarks.*函式相同

保證您使用的功能

let create = p1 => new Promise((resolve, reject) => {
    chrome.bookmarks.create(p1, resolve);
});
let move = (p1, p2) =>  new Promise((resolve, reject) => {
    chrome.bookmarks.move(p1, p2, resolve);
});
let removeTree = p1 => new Promise((resolve, reject) => {
    chrome.bookmarks.removeTree(p1, resolve);
});

然後,您可以按以下方式使用這些功能:
let anotherFolder='whatever';
let anotherFolder2='whatever';


create({title:'whatever2'})
.then(parentFolder => move(anotherFolder, {parentId: parentFolder.id}))
.then(() => removeTree(anotherFolder));

如果您正在考慮在Firefox中使用擴充套件程式(最終在Edge中可用)

未經測試
let create = browser.bookmarks.create || p1 => new Promise((resolve, reject) => {
    chrome.bookmarks.create(p1, resolve);
});
let move = browser.bookmarks.move || (p1, p2) => new Promise((resolve, reject) => {
    chrome.bookmarks.move(p1, p2, resolve);
});
let removeTree = browser.bookmarks.removeTree || p1 => new Promise((resolve, reject) => {
    chrome.bookmarks.removeTree(p1, resolve);
});

然後,您上面的程式碼應可在任何Web擴充套件中使用

出處

Have any Question?

Let us answer it!