【发布时间】:2018-02-13 14:04:33
【问题描述】:
我的问题是我无法构造 promisesArray。
这很好用,但我需要动态构建这个数组。
var promisesArray=[get(url1),get(url2),get(url3)]; // url1,url2,url3 are valid urls here
var promises = Promise.all(promisesArray);
promises.then(function(results) {
console.log('this came back: ',results);
}).catch(function(error) {
console.log(error);
});;
function get(url) {
// Return a new promise.
return new Promise(function(resolve, reject) {
// Do the usual XMLHttpRequest stuff
});
}
我正在尝试构建上面的数组 promisesArray,其中每个元素都是一个承诺,但我尝试的每一种方式都只是添加调用 get() 的结果 我最终得到了一系列未决的承诺
Array [ Promise { "pending" }, Promise { "pending" }, Promise { "pending" }]
当我想要时:
promisesArray=[get(url1),get(url2),get(url3)];
例如,我试过:
let template=['a','b','c','d'];
var promiseArray=[]
template.forEach(function(pos){
let url=lookupUrl[pos]](); //just a function that returns a Url determined by the values of template array
promiseArray.push(get(url));
})
但显然我只是在这里返回 get 调用的结果..
我尝试使用 bind,但我又一次得到了一组正在执行的 Promise...
var promiseArray = template.map(function(pos){
var url = lookupUrl[pos]]();
var out= get.bind(null,url);
return out()
})
我不知道如何创建一个未调用函数的数组。
[编辑更新] 正如@JaromandaX 在第一条评论中指出的那样,我已经拥有了我需要的东西,实际上上述两种方法中的任何一种都可以用于构建承诺数组。正如@Roamer-1888 也指出的那样,我被认为需要一组“未调用函数”,这是不正确的。
我喜欢@HMR 在他的回答中使用的方法,所以我要试试。
【问题讨论】:
-
那么,你想要一个承诺数组,而不是一个承诺数组?
-
get何时/如何启动?我的意思是,你可以做function get(url) { return function() { // Return a new promise. return new Promise(function(resolve, reject) { // Do the usual XMLHttpRequest stuff }); }; }...然后你有一个函数数组,但是它们将如何被调用? -
对不起,我不明白你的问题。我需要数组,就像第一部分有效的代码一样,我在程序中输入了 promise 数组。我无法以编程方式构建它。
-
那么,你希望你的数组是一个 Promise 数组吗?
-
Promise.all 不调用函数,它等待 Promise 解决
标签: javascript arrays promise