es7:
我有一种方法,可以从数据库异步返回对象(按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);
});