从那时起返回另一个承诺的承诺
returning a promise from the then of another promise
我对此有点陌生。请帮助
我正在尝试 return 来自函数的承诺。在我尝试 return 现有承诺的承诺之前,这似乎运作良好。
我正在尝试在 FireFox 扩展中执行此操作。下面的代码是为 node.js 编写的,因为我认为它可能会提供更多解释。我不知道如何让它工作。
函数 topLevel 调用函数 level2。 level2 等待 promise 解决,然后 return 向 level1 发送一个 promise。级别 1 登录其 .then.
level2 在其内部 promise 得到解决并且 returns 一个新的 promise
后调用 level3
在示例中,所有承诺都会立即解决。该示例与要点配对
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" 可以改变 level 2 的行为。当设置为 "true" 时,level2 会等待一个 promise 并且 return 在那个 promises then 语句中是来自 level3 的一个 promise . level3 是 运行 但 level1 中的 console.log 永远不会执行并导致错误。当设置为 false 时,一切正常(来自 level3 的承诺是直接 returned 而不是在.then 中。错误是 Cannot read 属性 'then' of undefined in toplevel .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
为真时,level2
不会 return 任何东西。
thenable(给then
的函数)是一个函数。 thenable 中的 return 语句只涉及 thenable 本身(就像任何函数一样)。
改为
function level2() {
if (testError) {
return new Promise((resolve, reject) => {
resolve("Level 2");
}).then(() => {
return level3();
});
}
return level3();
}
您需要 return
您在 level2
函数中创建的 new Promise
。
我觉得很简单,就是在第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 来自函数的承诺。在我尝试 return 现有承诺的承诺之前,这似乎运作良好。
我正在尝试在 FireFox 扩展中执行此操作。下面的代码是为 node.js 编写的,因为我认为它可能会提供更多解释。我不知道如何让它工作。
函数 topLevel 调用函数 level2。 level2 等待 promise 解决,然后 return 向 level1 发送一个 promise。级别 1 登录其 .then.
level2 在其内部 promise 得到解决并且 returns 一个新的 promise
后调用 level3在示例中,所有承诺都会立即解决。该示例与要点配对
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" 可以改变 level 2 的行为。当设置为 "true" 时,level2 会等待一个 promise 并且 return 在那个 promises then 语句中是来自 level3 的一个 promise . level3 是 运行 但 level1 中的 console.log 永远不会执行并导致错误。当设置为 false 时,一切正常(来自 level3 的承诺是直接 returned 而不是在.then 中。错误是 Cannot read 属性 'then' of undefined in toplevel .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
为真时,level2
不会 return 任何东西。
thenable(给then
的函数)是一个函数。 thenable 中的 return 语句只涉及 thenable 本身(就像任何函数一样)。
改为
function level2() {
if (testError) {
return new Promise((resolve, reject) => {
resolve("Level 2");
}).then(() => {
return level3();
});
}
return level3();
}
您需要 return
您在 level2
函数中创建的 new Promise
。
我觉得很简单,就是在第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");
}));
}