gpt4 book ai didi

node.js - 请求太多会导致nodejs出错吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:27 28 4
gpt4 key购买 nike

var urlArr = {
//ex url_for_site0 = 'https://www.google.com'
url_for_site0,
url_for_site1,
url_for_site2,
url_for_site3,
...
url_for_site50
};

urlArr.forEach(function(url, index) {
request(url, function(err, res, body) {
if(err) console.log(index+err);
else console.log(index+" success");
});
});

每次执行应用程序时,我都会得到不同的无序结果和错误。

示例:

1 error : socket hang out
21 error : socket hang out
17 error : socket hang out
1 error : socket hang out
19 error : socket hang out
...(omission)
5 success
15 success
45 success
50 success
11 success
37 success

每次我得到结果时,它们的顺序都是不同的。这是因为我同时调用了太多请求吗?当我一一请求时,没有错误。

示例:

request(url_for_site0)
and restart program
request(url_for_site1)
and restart program
request(url_for_site2)
...

最佳答案

NodeJS 事件全部在单个池中处理,并且具有非阻塞性质。您可以引用下图。

当我尝试调用多个 SQL 查询时,我就遇到过这种情况。当我用C#做的时候,完全没有问题。然而,NodeJS 给了我与你类似的行为。

nodejs

我不确定这是否是解决该问题的最佳方案。不过,以下是我通过 SQL 调用解决问题的方法。我使用了异步 waterfall 函数,使整个过程变得同步。每个函数都将逐个运行,其返回值通过管道传递到下一个函数。所以,你甚至可以做更多的事情。该库的使用不是很简单,您可以引用此链接以更好地帮助您了解异步 waterfall 是如何工作的,然后使其适合您的解决方案。

https://gist.github.com/dineshsprabu/e6c1cf8f2ca100a8f5ae

以下是我如何想象您的解决方案大致如下:

var async = require('async');

async.waterfall(
[
function(callback) {
function_urlArr(url, index, function (returnVal) {
//Do something with the returnVal
callback(null, returnVal);
});

},
function(returnVal, callback) {
//the returnVal from first function gets passed here synchronously
function_urlArr(url2, index2, function (returnVal) {
//Do something with the returnVal
callback(null, returnVal);
});
},
function(returnVal, callback) {
//and so on ...
}
],
function (err) {
//console.log(err);
});

//define your function and enable callback
//you will need to include an extra third argument to receive the callback
function urlArr(url, index, callback) {
//your code
return callback(returnValue)
}

关于node.js - 请求太多会导致nodejs出错吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49897268/

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