Javascript(typescript)Chrome扩展,函数回调作为承诺? [英] Javascript (typescript) Chrome extension, function callback as promises?
问题描述
对于这样的代码
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屋!