[英]ES6 Javascript Promise - execute after .then() is called
如果要在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") })
決心后插入的代碼執行一次許是解決了,但在此之前被調用的函數的范圍之外。 有沒有一種方法可以在兩者之后執行代碼,但是可以在函數范圍內執行呢?
在功能范圍內,ES6 Promise是否可以做同樣的事情?
不,這是不可能的。 then
回調總是異步運行的,這包括在resolve()
調用方面是異步的。
(也就是說,promise回調已排隊,因此您可以濫用該隊列以使您的代碼落后於另一個:
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
但是請不要那樣做)
如果要在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");
});
這稱為處理程序模式 ,對於處理資源非常有用。
您可以使用可以在then塊中調用的函數來解決Promise。 只要在塊中調用該函數,就可以像這樣在執行之前執行代碼
function demoPromise() { return new Promise((resolve, reject) => { resolve(function(){ console.log("I execute second") }); }) } demoPromise().then(f => { console.log("I execute first");f();})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.