javascript - 在 Node 中使用 promise 循环返回相同的响应

标签 javascript node.js promise q

当使用 q 时,我得到与循环次数相同的响应:

function start() {
    var the_promises = [];
    var api_info = config.AFV
    var deferred = Q.defer();
    var extPath = '/search/'
    var callType = 'GET'
    var mymd = buildmd5(api_info, extPath, callType);

    for(var page=1;page<4;page++) {

        console.log('getting page:'+page)
        new Client().get(url'+page, function(data, response){
            deferred.resolve(data);
        });
        the_promises.push(deferred.promise);
    }  
    return Q.all(the_promises);
}

start().then(function (clips) {
    inspect(clips)
});

输出: 结果页数:[ '1' ], 结果页数:[ '1' ], 结果页数:[ '1' ], 结果页数:[ '1' ],

我觉得我可能有 var deferred = Q.defer();在错误的地方,它不会保存不同的 promise 。我知道这个版本的代码不起作用,但我只关心 promise 。谢谢!

最佳答案

您需要为每个新客户创建一个新的 deferred。并将该循环体放入一个立即调用的函数中,以正确确定 var 的范围。

function start() {
    var the_promises = [];
    var api_info = config.AFV;
    var extPath = '/search/';
    var callType = 'GET';
    var mymd = buildmd5(api_info, extPath, callType);

    for(var page=1;page<4;page++) {
        (function() {
            var deferred = Q.defer();
            console.log('getting page:'+page);
            new Client().get('url'+page, function(data, response){
                deferred.resolve(data);
            });
           the_promises.push(deferred.promise);
        }());
    }  
    return Q.all(the_promises);
}

start().then(function (clips) {
    inspect(clips);
});

关于javascript - 在 Node 中使用 promise 循环返回相同的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24172245/

相关文章:

javascript - Node.js、Ajax发送和接收Json

javascript - 在 JS Promise 中调用所有 "on"事件后返回

Javascript:如何更改页面中所有链接的样式?

javascript - 在查询 mongodb 之前,如何检查 mongo db 中是否存在字段?

javascript - Angular : ionic. bundle.js :21157 TypeError: PubNub. 中的 Ionic Pubnub 聊天发布不是一个函数

android - 解析开源服务器云代码与旧代码不同

node.js - 使用 Mongoose 从 MongoDB 获取数据

javascript - jQuery 延迟无法解决

javascript - Nodejs websockets 客户端待处理 promise

javascript - Angular-translate 其中翻译包含指令