19新版教育培训风格演示站

标题: JS中异步调用可以转化为同步调用吗? [打印本页]

作者: BIG烂漫儿    时间: 2019-1-10 17:23
标题: JS中异步调用可以转化为同步调用吗?
  1. function wait() {
  2.         const p = () => ({
  3.             value: new Promise(resolve => setTimeout(() => resolve(), 3000))
  4.         })
  5.         let state = {
  6.             next: () => {
  7.                 state.next = programPart
  8.                 return p()
  9.             }
  10.         }
  11.         function programPart() {
  12.             console.log('unlocked1')
  13.             state.next = programPart2
  14.             return p()
  15.         }
  16.         function programPart2() {
  17.             console.log('unlocked2')
  18.             console.log('it\'s sync!!')
  19.             return {
  20.                 value: void 0
  21.             }
  22.         }
  23.         return state
  24.     }
复制代码



这个函数该如何调用?

作者: Wotchin    时间: 2019-1-10 17:23
var state = wait()
state.next()
    .value
    .then(() => state.next().value)
    .then(() => state.next().value)
    .then(() => console.log(state.next()))
作者: Geely    时间: 2019-1-10 17:24
可以使用async函数来实现视觉上的同步调用。async是 Generator 函数的语法糖。

  1. const fn = async function () {
  2.   let state = wait();
  3.   await state.next().value;
  4.   await state.next().value;
  5.   return state.next().value;
  6. }
  7. fn()
复制代码





欢迎光临 19新版教育培训风格演示站 (http://47.100.112.22/demo/train/) Powered by Discuz! X3.5