我创建了一个返回 promise 的函数。
function fetch1 () {
return new Promise((res, rej) => {
res("A");
});
}
我在函数 api1 中调用此函数并返回从 fetch1 返回的 promise 。
function api1 () {
return fetch1().then(v =>{
console.log("Api1", v);
return "B"
);
}
如您所见,我返回的值与 fetch1 返回的值相同。我不会创建任何新的 Promise。但是当我调用它时,我得到以下输出。
api1().then(v => console.log("Api2 call", v));
Api1 A
Api2 call B
我的预期输出应该是
Api1 A
Api2 call A
正如你可以从这个 link 看到的。那么这个 promise 就被束缚了。从第一个 then 返回的 promise 在下一个 then 中得到解决。但我不会从 api1 函数内部返回任何 promise 。
我可以绕过它。但为什么会出现这种情况。
最佳答案
当您返回 Promise 时,您实际上并没有返回 Promise 内部的内容,而是返回 Promise 本身。当你说
function api1 () {
return fetch1().then(v =>{
console.log("Api1", v);
return "B"
);
}
你说的是“console.log
前一个Promise的结果,然后返回一个包含B
的新 Promise。
所以当你打电话时
api1().then(v => console.log("Api2 call", v));
原始 Promise(包含“A”)已被消耗,新的 Promise 包含您之前返回的字符串“B”。
要获得您想要的输出,请像这样重写第二部分:
function api1 () {
return fetch1().then(v =>{
console.log("Api1", v);
return v;
);
}
关于javascript - 为什么从函数返回的 Promise 解析为从该函数内的 .then 返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55571955/