类似于这个问题:Return response from async call 只不过该调用是在多次调用异步函数的循环内进行的。
具体来说,如何返回s的值?此代码返回未定义。该函数在 for 循环内调用。用于 ORM 的库是 Bookshelfjs。感谢您的帮助。
function getUsernameFromDBAsync(userId) {
var s = "moo";
new Model.Users({
idUser: userId
})
.fetch()
.then(function(u) {
var prenom = u.get('firstName');
var nom = u.get('familyName');
s = prenom + " " + nom;
return s;
});
}
最佳答案
你并没有真正展示你是如何进行循环的,这使得猜测推荐什么变得有点困难。但是假设 .fetch().then()
返回一个 Promise,这是 Node.js 中内置的标准 ES6 Promise 的总体思路:
function getUsernameFromDBAsync(userId) {
var s = "moo";
return new Model.Users({
idUser: userId
}).fetch().then(function (u) {
var prenom = u.get('firstName');
var nom = u.get('familyName');
s = prenom + " " + nom;
return s;
});
}
var userIds = [...];
var promises = [];
for (var i = 0; i < userIds.length; i++) {
promises.push(getUsernameFromDBAsync(userIds[i]));
}
// now set up a .then() handler for when all the promises are done
Promise.all(promises).then(function(names) {
// process names array here
}, function(err) {
// process error here
});
如果您使用 Bluebird Promise 库,您可以像这样更简单一些:
function getUsernameFromDBAsync(userId) {
var s = "moo";
return new Model.Users({
idUser: userId
}).fetch().then(function (u) {
var prenom = u.get('firstName');
var nom = u.get('familyName');
s = prenom + " " + nom;
return s;
});
}
var userIds = [...];
Promise.map(userIds, getUsernameFromDbAsync).then(function(names) {
// process names array here
}, function(err) {
// process error here
});
关于javascript - 如何返回多个异步调用的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33466460/