如何在循环中同步遍历promise对象引用链

时间:2016-12-02 04:36:54

标签: javascript node.js

我有一个方法,它以异步方式从数据库返回一个对象的promise(通过id)。

function getObj(id){} ....返回对象的承诺

通过存储其id,它可能有也可能没有对另一个对象的引用。

object.nextObjId

我需要遍历引用链,直到找到使用此方法的终端对象。显然我必须等待承诺解决才能检查下一个参考。

在同步代码中,它看起来像这样:

function getTerminalObj(id)
{
    var obj = getObj(id);
    while(obj.nextRef)
    {
       obj = getObj(obj.nextObjId);
    }

    return obj;
}

当getObj(id)改为返回对象的承诺时,我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

如果我错了,请纠正我。我想你在问“如何以同步的方式解决承诺”。 在JS / NodeJS的上下文中,有几个选项:

ES6:Co.js / Generators

ES7:await/async Async Functions

这两种方法都需要你:

  • 有一个相对较新版本的JS实现。
  • 使用babel将ES6 / ES7代码转换为旧的ES5代码。

但是,我会说你不必以同步方式这样做。以下代码可能有所帮助:

function chain(obj) {
  if (obj.nextRef) {
    return getObj(obj.nextObjId).then(chain);
  }
  return Promise.resolve(obj);
}

getObj(id).then(chain).then(function(terminalObj) {
  // There is the terminal object.
  console.log(terminalObj);
});