【发布时间】:2018-09-29 08:31:26
【问题描述】:
我有一个脚本,它设置了一组用户名,然后为每个用户名运行一个 fetch 请求以 twitches API 端点获取每个用户的 Json 信息。然后我想将这些信息放入一个数组中以备后用,并发现我必须使用我以前从未使用过的 Promise。我通读了这个:https://developers.google.com/web/fundamentals/primers/promises 和这个:https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md,我在这里阅读了 Felix Kling 的回复:How do I return the response from an asynchronous call?,我仍然无法准确理解什么去哪里以及做什么。这是我到目前为止所拥有的:
var users = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"]
var arr = [];
var headers = {
'Client-Id': 'xxxxxxxxxxx'
}
var promise = new Promise(function usersJson(callback) {
for (i = 0; i < users.length; i++) {
var url = "https://api.twitch.tv/helix/users?login=" + users[i];
fetch(url, {headers})
.then(function(response) {
return response.json();
})
.then(function(myJson) {
arr.push(myJson);
})
callback(arr);
};
})
promise.then(function(result) {
console.log(result);
})
据我了解,这应该通过每个端点运行,将数据推送到我的数组变量,然后一旦整个事情“完成”,它应该用我的 promise 变量调用“then”事情来控制台。记录我的阵列。我得到的只是一个空白数组,我真的不确定我做错了什么。如果我将 console.log(arr) 放在 arr.push(json) 之后,我会返回 8 个数组,每个数组都附加了下一个响应主体,所以我知道调用正在工作,但我无法得到它坚持我的阵列。
【问题讨论】:
-
为什么在 forEach 可以使用时使用 for 循环?
-
你也没有承诺任何回报。
-
不,实际上你的
callback(arr);应该在第二个then内,而且每次获取都是一个承诺,所以一旦你解决了第一个问题,它就会触发callback(arr)并退出 -
我只是将它切换到 forEach,但这并不能解决我的问题。据我所知,使用 forEach 还是 for 循环并不重要。
-
你在 promise 执行之前调用了
callback(arr);
标签: javascript arrays json promise