javascript - 嵌套的 request,如何等待 request function 的完成?
ringa_lee
ringa_lee 2017-04-11 11:53:04
[JavaScript讨论组]

使用了下面的代码:

request(firstparams, function () {
    var secondparams = {
    // ******
    };

    request(secondparams, function () {
        for (i=0; i<3; i++) {
            var thirdparams = {
            // ******
            };

            request(thirdparams, function () {
                console.log('foo');
            });
        }
        console.log('bar');
    });
}); 

想要获得如下的结果:

foo
foo
foo
bar

但是结果却是:

bar
foo
foo
foo
ringa_lee
ringa_lee

ringa_lee

全部回复(3)
PHP中文网

Promise.all吧,可以等待多个请求都结束了使用then处理后面的行为
写个demo 适当改一下应该就可以了

// ajax函数 可以用request封装
var ajax = (url, type) => {
    return new Promise((resolve, reject) => {
        // 这块可以自己修改一下
        request({
            url,
            cb: function(data) {
                console.log('foo')
                resolve(data)
            }
        })
    })
}
// 生成promise要用的数组
var arr = []
for (i=0; i<3; i++) {
    arr.push(ajax('/xxx/xxx'))
}
// 执行 等到三次请求都结束后 打印出来bar 因为每次请求都打印foo
// 所以结果应该是foo foo foo bar
Promise.all(arr).then((value) => {
    console.log('bar')
})
伊谢尔伦
request(secondparams, function () {
    var didSuccess = 0;
    for (i=0; i<3; i++) {
        var thirdparams = {
        // ******
        };

        request(thirdparams, function () {
            console.log('foo');
            if (didSuccess++ === 2) {
                callback();
            }
        });
    }
    function callback() {
        console.log('bar');
    }
});
巴扎黑

你这么写 输出结果是正确的啊。 输出bar的语句虽然写在了最后,但是它是不等待上面的request执行完毕才执行的。

如果console.log('foo');不写在for的request里,才会输出

foo
foo
foo
bar

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号