2014-10-28 182 views
0

我想获取一个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; 
} 

我想我真正的问题是:你如何得到在递归异步函数中工作的承诺?

或者,如果你有更好的方法做到这一点,那也可以。

回答

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

+0

这就行了,谢谢! – markain 2014-10-28 16:23:38