【发布时间】:2019-08-29 12:22:58
【问题描述】:
我创建了一个返回承诺的函数。
function fetch1 () {
return new Promise((res, rej) => {
res("A");
});
}
我在函数 api1 中调用此函数并返回从 fetch1 返回的承诺。
function api1 () {
return fetch1().then(v =>{
console.log("Api1", v);
return "B"
);
}
如您所见,我返回的值与从 fetch1 返回的值相同。我没有创造任何新的承诺。但是当我调用它时,我会得到以下输出。
api1().then(v => console.log("Api2 call", v));
Api1 A
Api2 call B
我的预期输出应该是
Api1 A
Api2 call A
从link 可以看出。然后,这个承诺被束缚了。从 first then 返回的 promise 在 next then 中解决。但是从那时起,我没有在 api1 函数中返回任何承诺。
我可以绕过它。但是为什么会发生。
【问题讨论】:
-
function api1 () { return fetch1().then(v =>{ console.log("Api1", v); return "B" //
-
对我来说,根据您链接的 MDN 文章中所写的内容,输出看起来是正确的。在 Syntax -> Return value 副标题中说:“如果处理函数:返回一个值,则 'then' 返回的 promise 以返回值作为它的值来解析”。这意味着当您返回值“B”时,处理函数返回的承诺会使用该值解析,并打印在 console.log
-
返回 v; // 你会得到你预期的结果。
标签: javascript promise