关于js异步的问题

发布于 2022-09-12 13:22:11 字数 1125 浏览 23 评论 0

  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
  ...
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

稀香 2022-09-19 13:22:11

a.就这样写
b.

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

c.不能

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文