假设我有多个异步方法task1() task2() task3()...我想这些方法全部异步执行,在所有方法执行完毕之后再执行final()这个方法,应该如何实现
具体例子:
编写油猴脚本时使用GM_xmlhttpRequest,用for循环开启多个请求:
for (let i = 0; i < length; i++) {
let gameNum = ""
let url = "" //每次循环会附上不同gameNum和url值
GM_xmlhttpRequest({
method: "GET",
context: {
gameNum: gameNum,
},
url: url,
synchronous: true,
onload: haveCloud,
});
}
此外有一数组
let game = []
每次请求的回调函数haveCloud会对geme数组进行修改
想要在所有请求完成后将数组输出
大概是这么个要求
let game = [];
let promiseArr = [];
for (let i = 0; i < length; i++) {
let gameNum = ""
let url = "" //每次循环会附上不同gameNum和url值
promiseArr.push(new promise((res)=>{
GM_xmlhttpRequest({
method: "GET",
context: {
gameNum: gameNum,
},
url: url,
synchronous: true,
onload: (response)=>{
haveCloud(response);
res(true)
}
}));
})
}
Promise.all(promiseArr).then(()=>{console.log(game)})
###https://developer.mozilla.org...
###getGameInfo(gameNum, url) {
GM_xmlhttpRequest({
method: "GET",
context: {
gameNum: gameNum,
},
url: url,
synchronous: true,
onload: haveCloud,
});
}
const functions = []
for (let i = 0; i < length; i++) {
functions.push(getGameInfo(gameNum, url)) // 自己补获取 gameNum 和 url 的代码
}
game = await Promise.all(functions)