- 是否一般的函数执行就可以说是阻塞的,同步执行的?比如:
const sync = function() {
let a = 1
let b = 2
let c = 3
}
也即是说,在这3行赋值语句执行完成之前,函数外所有的语句执行都是停滞的?
- 如果一个函数形似:
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
...
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…