上代码:
function sleep() {
console.log('sleep start');
const p = Promise.resolve(); // p是一个resolved的promise对象
return p.then( () => {
setTimeout(console.log.bind(console, 'sleep 1000ms'), 1000);
}); //return 一个新的promise对象
}
async function init() {
console.log('init start');
await sleep();
console.log('init end');
}
init();
以上运行结果为:
init start
sleep start
init end
sleep 1000ms
而将sleep函数写成如下形式:
function sleep() {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('sleep 1000ms');
resolve();
}, 1000);
});
}
则运行结果为:
init start
sleep start
sleep 1000ms
init end
// 正是预料中的结果
新人,对异步理解不透彻,请各位大佬解释一下运行结果为什么会不同?(我觉得执行结果应该一样啊╮(╯▽╰)╭)跪谢!
回复 (2)
B
引用 manxisuo两种情况下,await后面的promise被resolved的时机不一样。 详细说: 关键就是看await后面返回的promise对象什么时候被resolved。一个是setTimeout函数...
@manxisuo 辛苦了。很简单的问题,当时怎么就想不通呢!(滑稽脸)
参与回复
登录后即可参与回复。登录