如何在循环中同步遍历承诺对象参考链



我有一种方法,可以从数据库异步返回对象(按ID)的承诺。

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

它可以通过存储其ID来或可能没有对另一个对象的引用。

object.nextobjid

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

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

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

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

如果我错了,请纠正我。我认为您在问"如何以同步方式解决诺言"。在JS/Nodejs的背景下,有一些选择:

es6:co.js/generators

es7: await/async async函数

两种方法都需要您:

  • 有一个相对较新的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);
});

最新更新