[英]returning a promise from the then of another promise
我對此有些新意。 請幫忙
我試圖從一個函數返回一個承諾。 直到我嘗試在現有諾言中退還諾言之前,這似乎一直很好。
我正在嘗試在FireFox擴展中執行此操作。 下面的代碼是為node.js編寫的,因為我認為它可能會提供更多解釋。 我不知道如何使它工作。
函數topLevel調用函數level2。 level2等待一個諾言解決,然后將諾言返回給level1。 level1登錄其.then。
在內部承諾得到解決后,level2調用level3並返回新的promise
在該示例中,所有承諾都會立即解決。 該示例與基本要素配對
function topLevel() {
level2()
.then(() => {
console.log("topLevel resolved")
})
}
let testError=true;
function level2() {
if(testError) {
new Promise((resolve, reject) => {
resolve("Level 2");
})
.then(() => {
return (level3());
})
}
else {
return (level3());
}
}
function level3(){
return (new Promise((resolve, reject) => {
resolve("Level 3");
}));
}
topLevel();
有一個變量“ testError”可以更改級別2的行為。當設置為“ true”時,級別2等待一個諾言,並從該諾言then語句中返回級別3的諾言。 level3已運行,但level1中的console.log從不執行,並導致錯誤。 設置為false時,一切正常(來自level3的承諾將直接返回,而不是在.then中返回。錯誤是無法讀取頂級.then中未定義的屬性'then'。
下面是來自后台腳本的firefox webextension代碼
browser.browserAction.onClicked.addListener(topLevel);
function topLevel() {
level2()
.then(() => {
console.log("topLevel resolved")
})
}
function level2() {
new Promise((resolve, reject) => {
resolve("Level 2");
})
.then(() => {
return (level3());
})
}
function level3(){
return (new Promise((resolve, reject) => {
resolve("Level 3");
}));
}
它在.then和return語句之間的level2中引起警告“ level2 is undefined”。 再次登錄一級永遠不會發生。
有什么辦法可以使這項工作? 我需要依靠這種模式
當testError
為true時, level2
不返回任何內容。
thenable( then
賦予的功能)是一個功能。 thenable內部的return語句僅涉及thenable本身(就像任何函數一樣)。
改成
function level2() {
if (testError) {
return new Promise((resolve, reject) => {
resolve("Level 2");
}).then(() => {
return level3();
});
}
return level3();
}
我認為這就像在第12行中的new Promise...
之前添加return
一樣簡單。修改后的代碼:
function topLevel() {
level2()
.then(() => {
console.log("topLevel resolved")
})
}
let testError = true;
function level2() {
if(testError) {
// Added "return" here
return new Promise((resolve, reject) => {
resolve("Level 2");
})
.then(() => {
return (level3());
})
}
else {
return (level3());
}
}
function level3() {
return (new Promise((resolve, reject) => {
resolve("Level 3");
}));
}
您需要return
在level2
函數中創建的new Promise
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.