const setDelay = (millisecond) => {
return new Promise((resolve, reject) => {
if (typeof millisecond != "number")
reject(new Error("参数必须是number类型"));
setTimeout(() => {
resolve(`我延迟了${millisecond}毫秒后输出的`);
}, millisecond);
});
};
const setDelaySecond = (seconds) => {
return new Promise((resolve, reject) => {
if (typeof seconds != "number" || seconds > 10)
reject(new Error("参数必须是number类型,并且小于等于10"));
setTimeout(() => {
resolve(`我延迟了${seconds}秒后输出的,注意单位是秒`);
}, seconds * 1000);
});
};
// Promise chains
setDelay(1000)
.then((result) => {
console.log(result);
return setDelaySecond(2);
})
.then((result) => {
console.log(result);
return setDelay(1000);
})
.then((result) => {
console.log(result);
console.log("完成");
})
.catch((err) => {
console.log(err);
});
// async/await
(async () => {
const result = await setDelay(1000);
console.log(result);
console.log(await setDelaySecond(2));
console.log(await setDelay(1000));
console.log("完成了");
})();
await
是个运算符,用于组成表达式,await 表达式的运算结果取决于它等的东西。
如果等到的不是个 Promise
对象,那么 await
表达式的运算结果就等于它等到的东西。
如果等到的是个 Promise
对象,那么 await
就会阻塞后面的代码,等着 Promise
对象的 resolved
状态,然后得到 resolve
的值,作为 await
表达式的运算结果。