繁体   English   中英

我如何在一个循环中同步遍历一个Promise对象引用链

[英]How can I traverse an promise object reference chain synchronously in a loop

我有一个方法可以异步地从数据库返回对象的承诺(按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 /生成器

ES7: await/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);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM