Cha*_*bee 5 javascript node.js promise es6-promise firefox-addon-webextensions
我对此有点陌生。请帮忙
我试图从函数返回一个承诺。这似乎很有效,直到我尝试在现有承诺的 then 中返回承诺。
我正在尝试在 FireFox 扩展中执行此操作。下面的代码是为 node.js 编写的,因为我认为它可能会提供更多解释。我不知道如何使它工作。
函数 topLevel 调用函数 level2。level2 等待一个 promise 来解决,然后将一个 promise 返回给 level1。level1 登录其 .then。
level2 在其内部 promise 被解析后调用 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();
Run Code Online (Sandbox Code Playgroud)
有一个变量“testError”,它改变了级别 2 的行为。当设置为“true”时,级别 2 等待承诺并在该承诺然后语句中从级别 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");
}));
}
Run Code Online (Sandbox Code Playgroud)
它会在 .then 和 return 语句之间的 level2 中导致“level2 未定义”的警告。再次登录一级永远不会发生。
有什么办法可以使这项工作?我需要依靠这种模式
我认为这就像在第 12 行return之前添加一个一样简单new Promise...。修改后的代码:
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");
}));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5764 次 |
| 最近记录: |