【发布时间】:2017-07-21 20:33:09
【问题描述】:
我在 nodejs 中循环获取 api 请求时遇到问题。我想从多个端点获取数据并在所有请求完成后继续。我尝试了类似的方法,但它正在运行异步并记录一个空数组。任何提示如何确定所有请求何时准备就绪?
var api_endpoints = { "1": "url1", "2": "url2", "3": "url3" };
var allApiSources = [];
_.each(api_endpoints, function (val, key) {
request(val, function (error, response, body) {
if (!error && response.statusCode == 200) {
var data = JSON.parse(body);
_.each(data.url, function (val, key) {
allApiSources.push(value);
});
}
});
});
console.log(allApiSources); // []
谢谢!
【问题讨论】:
-
1.使用 promises 或 2. 使用 asyncjs 或 3. 使用计数器来计算已推送到数组的值的数量,当它们全部完成后,您将拥有所有数据(不过,我不会推送到如果顺序很重要,则为数组 - 因为异步代码是异步的)
-
顺序在这里并不重要:)
-
我不能真正使用计数器,因为值的数量是动态的并且经常变化。
-
你正在使用
_.each...所以...为什么计数器不合适? -
好吧,因此你可以使用 api_endpoints.length 因为你不知道确切的长度
标签: javascript node.js asynchronous request underscore.js