[英]Promise.all returning undefined
我已经将jsonp请求包装在一个Promise中,并且正在进行一系列API调用,一旦它们全部解决,我希望进一步处理。
var users = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "habathcx", "RobotCaleb", "noobs2ninjas", "twitchpresents"]
Promise.all(users.map(function(user){
var url = "https://wind-bow.gomix.me/twitch-api/users/" + user;
return jsonp(url);
})).then(function(arr){
console.log(arr);
})
它返回一个PromiseValue未定义的promise数组,不允许我进一步处理这些值。
我的JSONP Promise包装器在这里:
var count = 0;
var jsonp = function(url, options) {
options = options || {};
var prefix = options.prefix || '__jp';
var param = options.param || 'callback';
var timeout = options.timeout ? options.timeout : 15000;
var target = document.getElementsByTagName('script')[0] || document.head;
var script;
var timer;
var cleanup;
var cancel;
var promise;
var noop = function() {};
// Generate a unique id for the request.
var id = prefix + (count++);
cleanup = function() {
// Remove the script tag.
if (script && script.parentNode) {
script.parentNode.removeChild(script);
}
window[id] = noop;
if (timer) {
clearTimeout(timer);
}
};
promise = new Promise(function(resolve, reject) {
if (timeout) {
timer = setTimeout(function() {
cleanup();
reject(new Error('Timeout'));
}, timeout);
}
window[id] = function(data) {
cleanup();
resolve(data);
};
// Add querystring component
url += (~url.indexOf('?') ? '&' : '?') + param + '=' + encodeURIComponent(id);
url = url.replace('?&', '?');
// Create script.
script = document.createElement('script');
script.src = url;
target.parentNode.insertBefore(script, target);
cancel = function() {
if (window[id]) {
cleanup();
reject(new Error('Canceled'));
}
};
});
return {
promise: promise.then(function(data){
var user = {
name: data.name,
logo: data.logo,
};
userData.push(user);
}),
cancel: cancel
};
}
我可以从单个API调用中推送结果,但是有一种方法可以从Promise.All访问值?
您不会从诺言中退回任何东西。 尝试这个:
promise: promise.then(function(data){
var user = {
name: data.name,
logo: data.logo,
};
userData.push(user);
return user; // <-- pass data further
}),
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.