/**
* @description 处理传入的异步任务的函数,配合await使用
* @param {Function} asyncTask 异步任务函数,会接收一个实参(异步任务完成通知器)
* @return {Object} 返回一个包含then方法对象
*/
function handleAwaitAsyncFn(asyncTask) {
const asyncFulfilled = Symbol('asyncFulfilled');
const that = {
[asyncFulfilled](value) {
that._thenCallback(value);
},
then(thenCallback) {
that._thenCallback = thenCallback;
}
}
asyncTask(that[asyncFulfilled]);
return that;
}
async function fn () {
const p = await handleAwaitAsyncFn((asyncFulfilled) => {
setTimeout(() => {
asyncFulfilled('异步完成通知');
console.log('里面-setTimeout-resolve');
}, 1000)
})
console.log('外面 - p:', p);
}
fn();
// 调用fn()函数后得到打印顺序:
// 里面-setTimeout-resolve
// 外面 - p: 异步完成通知