gpt4 book ai didi

Javascript.Run 同步多重 promise

转载 作者:行者123 更新时间:2023-12-03 07:01:44 25 4
gpt4 key购买 nike

我想请求一个网站 40 次。

我希望这是同步的,比如 10 个请求 4 次。

这是我的 1 次请求代码 - 40 次:

'use strict';

var request = require('request');
var co = require('co');


function callUrl(url) {
return new Promise((resolve, reject) => {
request.get(url, (e, r, b) => {
if (e) reject(e)
else
resolve(`Response from ${url}`);
});
})
}


co(function*() {
for (var i = 1; i < 41; i++) {
let rs = yield callUrl('https://www.google.com/?q=' + i);
// let rs = yield makeUrls(10,i);
console.log(rs);
}
});

我可以做出一系列 promise ,但我不知道如何将 q 的值更改为不同的值。

最佳答案

您不想同步运行它们 - 您想要同步它们 - 它们是不同的。

您可以将 Promise 数组与 Promise#all 一起使用。当您创建 Promise 时,操作已经被执行 - 只有 yield 同步事物。

您可以一次发出 10 个请求,如下所示:

co(function*() {
for (var i = 1; i < 41;) {
var promises = [];
for(var lim = i + 10; i < Math.max(lim, 41); i++) {
promises.push(callUrl('https://www.google.com/?q=' + i));
}
let rs = yield Promise.all(promises); // wait for everything
console.log(rs); // an array of 10 results
});

请注意,除此之外,您的代码仍然不是很高效 - 如果 10 个请求中有 9 个非常快,其中一个需要一分钟,会发生什么情况?您将只有一个传出请求。您可以使用像 bluebird 这样的库,它具有更高效的带有并发参数的 Promise.map 方法。

关于Javascript.Run 同步多重 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37022326/

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