javascript - 如何返回多个异步调用的响应?

标签 javascript asynchronous promise bookshelf.js

类似于这个问题: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/

相关文章:

javascript - 避免 TypeScript 中的 float Promise。 void 与 .catch 什么时候?为什么?

javascript - jQuery 在 div 中存储复选框的值

javascript - 多个异步 Mongoose 调用完成后执行某些操作

Lua中的异步延迟? (如 JavaScript setTimeout)

python - 如何请求多个页面而不等待输出?

javascript - 理解JavaScript中的async和await

javascript - 我可以在不创建延迟的情况下报告 Q promise 进度吗?

javascript - 如何在控制台中播放和暂停 Youtube 视频?

javascript - 如何将外部链接与 javascript 匹配(但忽略子域)?

javascript - Invariant Violation : Element type is invalid: expected a string or a class but got: undefined. 检查 `MyApp` 的渲染方法