我想带一个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;
}
我想我真正的问题是:你如何获得在递归异步函数中工作的承诺?
或者如果你有更好的方法,那也是有效的。
答案 0 :(得分:2)
只需返回.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