递归异步函数中的承诺
问题描述:
我想获取一个chrome书签并找到它的父母,一直到父书签文件夹。递归异步函数中的承诺
下面的函数用于获取给定书签的第一个父项。
function getParent(bookmark) {
var promise = new Promise(function(resolve, reject) {
chrome.bookmarks.get(bookmark.parentId, function(nodes) {
resolve(nodes[0]);
});
});
return promise;
}
我无法获得所有书签父母。下面的功能不起作用,但它应该显示我在找什么。
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;
}
我想我真正的问题是:你如何得到在递归异步函数中工作的承诺?
或者,如果你有更好的方法做到这一点,那也可以。
答
只需返回由.then
返回的承诺,无论是从.then
回调返回终值,或其他承诺:
function getParents(bookmark, parents) {
var parents = parents || [];
return getParent(bookmark).then(function(parent) {
parents.push(parent);
return parent.parentId == '0' ? parents : getParents(parent, parents);
});
}
见http://www.html5rocks.com/en/tutorials/es6/promises/#toc-chaining
这就行了,谢谢! – markain 2014-10-28 16:23:38