在递归异步函数中承诺 [英] Promises in recursive asynchronous functions
问题描述
我想要一个铬合金书签并找到它的父母,一直到父书签文件夹。
下面的函数用于获取给定书签的第一个父项。
<$ c $ b $ function getParent(bookmark){
var promise = new Promise(function(resolve,reject){
chrome.bookmarks.get(bookmark.parentId,function(nodes){
resolve (节点[0]);
});
});
返回承诺;
}
我无法获得所有书签父母。下面的功能不起作用,但它应该显示我在找什么。
函数getParents(书签,父母){
var parents = parents || [];
var promise;
$ b $ getParent(书签).then(函数(父){
if(parent.parentId =='0'){
parents.push(parent);
promise = Promise.resolve(parents);
} else {
parents.push(parent);
getParents(parent,parents);
}
}) ;
返回承诺;
}
我想我真正的问题是:你如何得到承诺在递归中工作异步功能?
或者如果您有更好的方式来做到这一点,那也可以。 .then
回调或其他承诺的最终值:
函数getParents(书签,父母){
var父母=父母|| [];
return getParent(bookmark).then(function(parent){
parents.push(parent);
return parent.parentId =='0'?parents:getParents(父母,父母);
});
}
请参阅 http://www.html5rocks.com/en/tutorials/es6/promises/#toc-chaining
I want to take a chrome bookmark and find its parents, all the way up to the parent bookmark folder.
The function below works for getting the first parent of the given bookmark.
function getParent(bookmark) {
var promise = new Promise(function(resolve, reject) {
chrome.bookmarks.get(bookmark.parentId, function(nodes) {
resolve(nodes[0]);
});
});
return promise;
}
I'm having trouble getting all of the bookmarks parents. The function below doesn't work but it should show what I'm looking for.
function getParents(bookmark, parents) {
var parents = parents || [];
var promise;
getParent(bookmark).then(function(parent) {
if (parent.parentId == '0') {
parents.push(parent);
promise = Promise.resolve(parents);
} else {
parents.push(parent);
getParents(parent, parents);
}
});
return promise;
}
I guess my real question is: how do you get promises to work in recursive asynchronous functions?
Or if you have a better way of doing this, that works too.
Simply return the promise returned by .then
and either return the final value from the .then
callback, or another promise:
function getParents(bookmark, parents) {
var parents = parents || [];
return getParent(bookmark).then(function(parent) {
parents.push(parent);
return parent.parentId == '0' ? parents : getParents(parent, parents);
});
}
See http://www.html5rocks.com/en/tutorials/es6/promises/#toc-chaining
这篇关于在递归异步函数中承诺的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!