因为每个
getDataParms
呼叫返回
Promise
你应该等待所有这些承诺首先得到解决
Promise.all
. 还有,因为
获取数据参数
返回
承诺
,
retrieveAllData
,消耗
getDataParams
,还应返回
承诺
为了最终
results
以后可用。而不是
var test2 = retrieveAllData(...
,你应该打电话
.then
上
检索所有数据
打电话。
function retrieveAllData(parm1, limit){
// Create an array of Promises, with `j`'s values being 0 to `limit - 1`:
const allPromises = Array.from(
{ length: limit },
(_, j) => {
// Make j start at 1 rather than 0:
j++;
const objKey = parm1 + "_data_" + j;
// After getDataParms resolves, return an object with keys `data1` and `[objKey]`:
return getDataParms(parm1, j)
.then((parms) => ({
data1: j,
[objKey]: parms
}));
}
);
return Promise.all(allPromises);
}
和它一起消费
然后
:
retrieveAllData('foo','2015')
.then(test2 => {
console.log(test2);
});
使用
for
循环而不是功能性的循环如下:
function retrieveAllData(parm1, limit){
const allPromises = [];
for (let year = 1990; year <= limit; year++) {
const objKey = parm1 + "_data_" + year;
allPromises.push(
getDataParms(parm1, j)
.then((parms) => ({
data1: j,
[objKey]: parms
}))
)
}
return Promise.all(allPromises);
}