2014-10-28 137 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