给 setTimeout、setInterval 配备 await 写法
setTimeout、setInterval 是两个常用的异步函数。
但作为异步函数,他们不支持 Promise
或者 async/await
写法。
代码写起来:
setTimeout(() => {
console.log('执行一些操作')
setTimeout(() => {
console.log('执行另一些操作')
// setTimeout ...
}, 3000)
}, 1000)
不好看!
尽管经过简单的封装,可以达到目的,但每次用到都封装一次——重复造轮子。
本篇介绍一个使用起来很方便的轮子:丑丑仔。
使用
安装
npm install ccz
例子
程序“暂停”一秒
const timeoutP = require('ccz/timeout')
async function main(){
console.log('开始')
await timeoutP(1000)
console.log('一秒之后')
await timeoutP(2000)
console.log('又过了两秒')
}
main()
每秒一次,共三次
const intervalP = require('ccz/interval')
async function main(){
console.log('开始')
await intervalP(1000, 3, () => {
console.log('哈哈')
})
console.log('结束')
}
main()
先停一秒,再每秒执行一次,执行两次;再停两秒,每半秒执行一次,执行三次,再等一秒!
const { timeoutP, intervalP } = require('ccz')
async function main(){
console.log('开始')
await timeoutP(1000) // 等一秒
await intervalP(1000, 2, () => {
console.log('每秒一次,共两次')
})
await timeoutP(2000) // 等两秒
await intervalP(500, 3, () => {
console.log('每半秒一次,共三次')
})
await timeoutP(1000) // 等一秒
console.log('结束')
}
main()
一秒执行 24 次
const withoutIntervalP = require('ccz/without-interval')
async function main(){
console.log('开始')
await withoutIntervalP(1000, 24, () => {
console.log('换帧')
})
console.log('结束')
}
main()
8 回复
setTimeout(() => {
console.log('执行一些操作')
setTimeout(() => {
console.log('执行另一些操作')
// setTimeout ...
}, 3000)
}, 1000)
包一下就可以 await 了
async function main() {
await new Promise((done) => setTimeout(() => {
console.log('执行一些操作', 1)
done();
}, 1000));
await new Promise((done) => setTimeout(() => {
console.log('执行另一些操作', 2)
done();
}, 3000));
// 你还可以在里面 await
await new Promise((done) => setTimeout(async () => {
console.log('再执行另一些操作', 3)
await new Promise((done) => setTimeout(() => {
console.log('再在执行另一些操作', 4)
done();
}, 3000));
done();
}, 5000));
console.log('over');
}
可以根据自己的需要包一下 new Promise 的过程… 整体上还是挺简单的…
不是应该叫靓仔吗
node 16已经支持了😂
import { setTimeout } from 'timers/promises';
async function run() {
await setTimeout(5000);
console.log('Hello, World!');
}
run();
@chenkai0520 有点期待
@lellansin 我一般也是这样操作的,哈哈
@chenkai0520 这个真香
不错点赞