我正在设置一个基于浏览器的应用程序,该应用程序应执行一些外部代码。因此,我使用了一些JavaScript代码,(递归地)显示了一个计数器,并且应该执行一些外部php代码后记(一些耗时的任务)。
例如,重复此过程。按顺序3倍。
我尝试通过使用Promise来强制每个函数等待较低的函数(例如,intermediateFunction等待heavyTask)来设置配置。
通过使用await,我试图强制循环异步运行。
function heavyTask(i) {
return new Promise((resolve, reject) => {
$.ajax({
....[i]..... // do something for file i in .php
success: function (result) {
if (result.error) {
reject(result.error_msg);
} else {
resolve(result.filename);
}
},
error: function (xhr, status, error) {
reject(error.error_msg);
}
});
});
}
function intermediateFunction(i) {
return new Promise((resolve, reject) => {
//display some stuff
heavyTask(i)
.then(filename => resolve(filename))
.catch(error_msg => reject(error_msg));
});
}
function countdown(i) {
function timerFunction() {
current--;
if (count < 3) {
console.log('Count ' + count)
window.setTimeout(timerFunction, 1000);
} else {
console.log('Counter done:'+ filename));
intermediateFunction(i).then(filename => console.log('Loop: '+filename));
}
count++;
}
count = 0;
timerFunction();
}
async function start () {
for(let i = 1; i <= x; i++){
console.log('Start timerFunction');
await countdown(i);
console.log('End timerFunction');
}
postprocessing();
}
到目前为止,代码还没有异步运行。 countdown()函数也可以并行执行,而postprocessing()在countdown()之前执行:
Start timerFunction
Count 0
End timerFunction
Start timerFunction
Count 0
End timerFunction
Start timerFunction
Count 0
End timerFunction
Count 1
Count 2
Count 3
Count 4
Counter done: 2 (core.js, line 191)
Counter done: 3 (core.js, line 191)
Counter done: 1 (core.js, line 191)
Loop: 3
Loop: 2
Loop: 1