【发布时间】:2016-10-14 10:52:07
【问题描述】:
我正在尝试编写一个函数,它在函数内部的 Promise 解决之前不会返回它的值。这是我正在尝试做的一个简化示例。
'use strict';
function get(db, id) {
let p = db.command('GET', 'group:${id}');
p.then(g => {
g.memberNames = [];
g.members.forEach(id => {
User.get(db, id)
.then(profile => g.memberNames.push(profile.name))
.catch(err => reject(err));
});
return g;
});
}
这是一个请求组 id 并返回该组数据的函数。在此过程中,它还将用户的姓名放入数据结构中以显示他们的姓名而不是他们的用户 ID。我的问题是这是异步运行的,并且会跳过 .then 回调。当它返回 g 时,还没有调用任何回调,g.memberNames 仍然是空的。有没有办法让函数等待返回 g 直到所有回调都被调用?
我看过很多关于等待的东西。这里有必要吗?非常不希望将其他库添加到我的项目中。
【问题讨论】:
-
我认为这样做的首选方法是将回调传递给您的函数,该回调将在准备好时调用。
-
最好还是放弃同步返回值的想法。您的数据库 API 公开了 Promise,因此请按原样使用它们,不要试图使其成为同步的东西。你可以写任何你想坚持异步/承诺模式的东西。这是改变你的观点的问题。
标签: javascript callback promise asynccallback