这是我尝试通过JSON.stringify(gamesList);
[{},{},{},{},{},{},{},{}]
以下是console.log(gamesList);
的打印输出
这是我的代码的一部分:
let gamesList = [];
while (hasNextPage(true)) {
let list = getGamesList();
gamesList = gamesList.concat(list);
}
console.log(gamesList);
Promise.all(gamesList).then((value) => {
saveAs(
new Blob([JSON.stringify(gamesList)]),
'Humble_Bundle_Games.json'
);
});
我是JS的新手,并且使用了异步代码和Promise类。我不知道为什么gamesList包含Promise对象,因为func返回包含字典/地图的列表。
getGamesList
是一个异步函数
阅读MDN JS文档,看起来Promise.all
就是我想要的,但是如何在已解决的承诺中访问已解析的值。
我使用vanilla JS和一个导入文件FileSaver.js
答案 0 :(得分:0)
gamesList
是一系列承诺。如果您执行JSON.stringify(new Promise())
,它将打印{}
,因为它是一个对象。 Promise.all
将接受一系列承诺,它将解析所有承诺并调用then方法的回调并传递已解析的值。
您的代码将变为
let gamesList = [];
while (hasNextPage(true)) {
let list = getGamesList();
gamesList = gamesList.concat(list);
}
console.log(gamesList);
Promise.all(gamesList).then((value) => {
saveAs(
value, // it contains array of all resolved values
'Humble_Bundle_Games.json'
);
});
只是为了理解承诺的概念:
var a = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(10)
}, 100)
})
var b = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(20)
}, 200)
});
var arr = [a, b];
Promise.all(arr).then(value => {
console.log(JSON.stringify(arr)) // It will print [{},{}]
console.log(JSON.stringify(value)) // It will print [10,20]
})