gpt4 book ai didi

javascript - Node js 没有解决 promise 数组

转载 作者:行者123 更新时间:2023-11-30 12:38:29 24 4
gpt4 key购买 nike

我正在尝试执行多个异步请求并尝试使用 promises 获取输出。

如果我有多个请求排队 Q.all(promises).then () 函数似乎无法正常工作。对于单个请求,所有 promise 都已解决。示例代码在这里。

var request = require('request');
var Q = require('q');

var sites = ['http://www.google.com', 'http://www.example.com', 'http://www.yahoo.com'];
// var sites = ['http://www.google.com']

var promises = [];

for (site in sites) {
var deferred = Q.defer();
promises.push(deferred.promise);
options = {url: sites[site]};

request(options, function (error, msg, body) {
if (error) {
deferred.reject();
}

deferred.resolve();
});
}

Q.all(promises).then (function () {
console.log('All Done');
});

我在这里做错了什么?

苏里亚

最佳答案

这是我在场景中要做的,这是整个代码:

var Q = require('q');
var request = Q.nfbind(require('request'));

var sites = ['http://www.google.com', 'http://www.example.com', 'http://www.yahoo.com'];
var requests = sites.map(request);

Q.all(requests).then(function(results){
console.log("All done") // you can access the results of the requests here
});

现在是为什么:

  • 始终在尽可能低的级别上 promise , promise 请求本身而不是具体请求。更喜欢自动 promise 而不是手动 promise ,以免犯愚蠢的错误。
  • 在处理集合时 - 使用 .map 比手动迭代它们更容易,因为我们在这里为每个 URL 生成一个操作。

这个解决方案也很短,需要最少的嵌套。

关于javascript - Node js 没有解决 promise 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25314086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com