递归异步函数中的Prom

时间:2014-10-28 16:09:04

标签: javascript google-chrome-extension promise

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

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

或者如果你有更好的方法,那也是有效的。

1 个答案:

答案 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