如果你想在JavaScript中调用回调后执行代码,那么你可以把它放在回调之后:
function demoCallback(callback) {
callback()
console.log("I execute second")
}
demoCallback(() => {
console.log("I execute first")
})
是否可以在函数的作用域中对ES6 Promise做同样的事情?假设我有一个返回Promise的函数:
function demoPromise() {
return new Promise((resolve, reject) => {
resolve()
console.log("I execute first")
})
}
demoPromise().then(() => { console.log("I execute second") })
在resolve之后插入的Code在Promise解析后执行,但*then之前的Code在函数作用域之外调用。有没有一种方法可以在两个函数之后执行代码,但在函数的作用域内执行?
3条答案
按热度按时间zpf6vheq1#
是否可以在函数的作用域中对ES6 Promise做同样的事情?
不这不可能
then
回调总是异步运行,这包括与resolve()
调用异步。(That promise回调是排队的,所以你可以滥用这个队列来让你的代码落后于其他队列:
请不要这样做)
如果要在JavaScript中调用回调后执行代码
那么你可能不应该只返回一个promise。在执行代码之前,执行一个回调函数来完成你想做的事情:
这被称为disposer pattern,对于处理资源非常有用。
z9gpfhce2#
你可以使用一个可以在then块中调用的函数来解析Promise。只要该函数在块内被调用,就可以像这样在它之前执行代码
fnx2tebb3#
你可以试试下面的方法