我有一个方法,它以异步方式从数据库返回一个对象的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)改为返回对象的承诺时,我该怎么做呢?
答案 0 :(得分:1)
如果我错了,请纠正我。我想你在问“如何以同步的方式解决承诺”。 在JS / NodeJS的上下文中,有几个选项:
await/async
Async Functions 这两种方法都需要你:
但是,我会说你不必以同步方式这样做。以下代码可能有所帮助:
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);
});