关于js异步的问题

  1. 是否一般的函数执行就可以说是阻塞的,同步执行的?比如:
const sync = function() {
  let a = 1
  let b = 2
  let c = 3
}

也即是说,在这3行赋值语句执行完成之前,函数外所有的语句执行都是停滞的?

  1. 如果一个函数形似:
const sync2 = async function() {
  var a = 0
  a = await a_return_promise_function()// return 1
  return a 
}

现在需要在一个事件触发函数event中调用sync2,想要实现效果:
a. 在event中阻塞,保证event函数会按顺序执行,对event的返回值不做处理,不阻塞event外部。最好是把event改为async event,调用写成await sync2()吗?(在此期间用户仍可执行其他动作?)
是否在调用含有返回promise对象的函数时,将当前函数设为async是最佳做法?

event: async function() {
  ...
  a = await sync2()
  ...
}

b. sync2会返回一个promise,那么如何改写或包装sync2,使得sync2异步返回a的值而不是promise对象?

event: function() {
  ...
  var a = 0
  a = new_sync2()
  console.log(a)// will be 0
  ...
}

c. sync2会返回一个promise,那么如何改写或包装sync2,使得sync2会同步执行,也就是效果等同于上文函数sync的执行?(在此期间用户不可执行其他动作?)
如果我想做到:

1. 像普通同步函数一样执行
2. 不阻塞外部执行

是否是无法做到的?

event: function() {
  ...
  var a = 0
  a = new_sync2()
  console.log(a)// will be 1
  ...
}
阅读 114
评论
    1 个回答
    • 19k

    a.就这样写
    b.

    event: function() {
      ...
      var a = 0
      sync2().then((resultData)=>{
         a = resultData;   
         console.log('resultData:',resultData);
         console.log(a);
      });
      ...
    }

    c.不能

      撰写回答

      登录后参与交流、获取后续更新提醒

      相似问题
      推荐文章