4
一个 async function 数组, 怎样一个一个顺序执行?
source link: https://www.v2ex.com/t/810025
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
想做到的是,每过一秒,分别打印:this is 0
this is 1
this is 2
~this is 8
下面的代码结果是过一秒后全部执行。
是不是哪里写的不对呢,多谢指教
var jobs = [];
for(let i = 0; i < 8; i++) {
jobs.push(async function(){
setTimeout(function(){
console.log("this is " + i)
},1000)
});
}
(async function () {
for (const job of jobs) {
await job()
}
})();
12 条回复 • 2021-10-24 00:33:09 +08:00
ruxuan1306 13 小时 18 分钟前
```
const job = new Promise((resolve, reject) => {
setTimeout(() => resolve, 3000)
})
console.log('start')
await job()
console.log('done')
```
const job = new Promise((resolve, reject) => {
setTimeout(() => resolve, 3000)
})
console.log('start')
await job()
console.log('done')
```
ruxuan1306 13 小时 16 分钟前
async 只是 promise 的语法糖,await 本质上必须等待一个 promise ,如果 await 一个立即数,则会立即 resolve 。
setTimeout 返回的是 timer 的 id ,是一个立即数,所以会立即 resolve ,你必须返回一个 promise 。
setTimeout 返回的是 timer 的 id ,是一个立即数,所以会立即 resolve ,你必须返回一个 promise 。
codehz 13 小时 15 分钟前
var jobs = [];
for(let i = 0; i < 8; i++) {
jobs.push(() => new Promise(resolve => setTimeout(() => {
console.log("this is " + i);
resolve();
},1000)));
}
(async function () {
for (const job of jobs) {
await job()
}
})();
for(let i = 0; i < 8; i++) {
jobs.push(() => new Promise(resolve => setTimeout(() => {
console.log("this is " + i);
resolve();
},1000)));
}
(async function () {
for (const job of jobs) {
await job()
}
})();
MonkeyD1 13 小时 15 分钟前
var jobs = [];
for (let i = 0; i < 8; i++) {
jobs.push(async function () {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(console.log("this is " + i));
}, 1000);
});
});
}
(async function () {
for (const job of jobs) {
await job();
}
})();
for (let i = 0; i < 8; i++) {
jobs.push(async function () {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(console.log("this is " + i));
}, 1000);
});
});
}
(async function () {
for (const job of jobs) {
await job();
}
})();
Curtion 13 小时 13 分钟前
你得这样
```javascript
var jobs = [];
for(let i = 0; i < 8; i++) {
jobs.push(async function(){
return new Promise(resolve => {
setTimeout(function(){
console.log("this is " + i)
resolve()
},1000)
})
});
}
(async function () {
for (const job of jobs) {
await job()
}
})();
```
```javascript
var jobs = [];
for(let i = 0; i < 8; i++) {
jobs.push(async function(){
return new Promise(resolve => {
setTimeout(function(){
console.log("this is " + i)
resolve()
},1000)
})
});
}
(async function () {
for (const job of jobs) {
await job()
}
})();
```
kaixuan1901 12 小时 24 分钟前
```javascript
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
(async function() {
for (let i = 0; i < 8; i++) {
await sleep(1000);
console.log("This is " + i);
}
})();
```
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
(async function() {
for (let i = 0; i < 8; i++) {
await sleep(1000);
console.log("This is " + i);
}
})();
```
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK