Max*_*x K 2 javascript callback promise ecmascript-6 es6-promise
如果你想在JavaScript中调用回调后执行代码,那么你可以在回调之后放置它:
function demoCallback(callback) {
callback()
console.log("I execute second")
}
demoCallback(() => {
console.log("I execute first")
})
Run Code Online (Sandbox Code Playgroud)
是否可以在函数范围内使用ES6 Promise做同样的事情?假设我有一个返回Promise的函数:
function demoPromise() {
return new Promise((resolve, reject) => {
resolve()
console.log("I execute first")
})
}
demoPromise().then(() => { console.log("I execute second") })
Run Code Online (Sandbox Code Playgroud)
后插入的代码决心执行一次许是解决了,但之前 则称为函数的范围之外.有没有办法可以在两者之后执行代码,但是在函数范围内这样做?
是否可以在函数范围内使用ES6 Promise做同样的事情?
不,这是不可能的.then回调总是异步运行,包括与resolve()调用异步.
(也就是说,承诺回调排队,所以你可以滥用那个队列让你的代码落后于另一个:
function demoPromise() {
const p = new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
p.then(() => {
console.log("I execute second");
}); // because I will be scheduled second
}, 1000);
});
return p;
}
demoPromise().then(() => {
console.log("I execute first");
}); // because I was scheduled first
Run Code Online (Sandbox Code Playgroud)
但请不要这样做)
如果要在JavaScript中调用回调后执行代码
那么你可能不应该只是回复一个承诺.在执行代码之前,执行一个可以执行所需操作的回调:
function demoPromise(callback) {
return new Promise((resolve, reject) => {
setTimeout(resolve, 1000);
}).then(() => {
return callback();
}).then(res => {
console.log("I execute second");
});
}
demoPromise(() => {
console.log("I execute first");
}).then(() => {
console.log("I execute last");
});
Run Code Online (Sandbox Code Playgroud)
这被称为处理器模式,对处理资源非常有用.
| 归档时间: |
|
| 查看次数: |
1636 次 |
| 最近记录: |