javascript - 为什么从函数返回的 Promise 解析为从该函数内的 .then 返回的值

标签 javascript promise

我创建了一个返回 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/

相关文章:

Javascript - promise 保持待处理状态

javascript promise 不传递所有参数(使用 Q)

javascript - 如何在 python-socketio 中将消息从 python 服务器发送到 javascript 客户端?

javascript - 如何显示 :none to display:block elements not take up its original space in DOM?

javascript - 为什么这个数组没有被传递?

javascript - Node JS Promise.all 和 forEach

javascript - 在哪里放置特定的模板助手

javascript - 使页面上的所有链接/引用指向其他地方

angularjs - 带有进度/通知的服务器异步请求

angular - 如何使用链式调用 Promise?