Javascript(typescript)Chrome扩展,函数回调作为承诺? [英] Javascript (typescript) Chrome extension, function callback as promises?

查看:220
本文介绍了Javascript(typescript)Chrome扩展,函数回调作为承诺?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于这样的代码

  let anotherFolder ='whatever'; 
让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'; 
让anotherFolder2 ='whatever';

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

因为我得到'Property'的错误,所以''在类型'void'上不存在。

*这是javascript-typescript,但这里应该没关系(?)

解决方案

您需要promisify任何 chrome.bookmarks。* 函数 - 这显然使它们与 browser.bookmarks。* 在Firefox和(最终)Edge Web Extensions中的函数



使用函数Promise

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

然后您可以使用这些函数,如下所示:

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

如果您想在Firefox中使用您的扩展程序(并最终使用Edge) b
$ b

未经测试

  let create = browser.bookmarks。创建|| p1 =>新的Promise((resolve,reject)=> {
chrome.bookmarks.create(p1,resolve);
});
let move = browser.bookmarks.move || (p1,p2)=>新的Promise((resolve,reject)=> {
chrome.bookmarks.move(p1,p2,resolve);
});
let removeTree = browser.bookmarks.removeTree || p1 =>新的Promise((resolve,reject)=> {
chrome.bookmarks.removeTree(p1,resolve);
});

然后您的上面的代码应该可以在任何Web扩展中使用

for a code like this

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();
    });
  });
});

can I transform it to chain functions? Something like

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();
    });
  });
});

Because I get the error of 'Property 'then' does not exist on type 'void'.'

*this is javascript-typescript, but it shouldn't matter here (?)

解决方案

You'll need to "promisify" any chrome.bookmarks.* functions - this, incidently, makes them work the same as browser.bookmarks.* functions in Firefox and (eventually) Edge Web Extensions

Promisifying the functions you use

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);
});

Then you can use these functions as follows:

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


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

If you are thinking of having your extension available in Firefox (and eventually Edge)

not tested

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);
});

Then your code above should work in any Web Extension

这篇关于Javascript(typescript)Chrome扩展,函数回调作为承诺?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆