JS中异步调用可以转化为同步调用吗?

function wait() {
        const p = () => ({
            value: new Promise(resolve => setTimeout(() => resolve(), 3000))
        })
        let state = {
            next: () => {
                state.next = programPart
                return p()
            }
        }
        function programPart() {
            console.log('unlocked1')
            state.next = programPart2
            return p()
        }
        function programPart2() {
            console.log('unlocked2')
            console.log('it\'s sync!!')
            return {
                value: void 0
            }
        }
        return state
    }

这个函数该如何调用?

阅读 5.8k
2 个回答
var state = wait()
state.next()
    .value
    .then(() => state.next().value)
    .then(() => state.next().value)
    .then(() => console.log(state.next()))

可以使用async函数来实现视觉上的同步调用。async是 Generator 函数的语法糖。

const fn = async function () {
  let state = wait();
  await state.next().value;
  await state.next().value;
  return state.next().value;
}
fn()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题