为什么在已履行的承诺上有未定义?

Why there is undefined on fulfilled promise?

你能给我解释一下吗?

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    if(true) {
      resolve('succes')
    } else {
      reject('failure')
    }
  }, 4000)
})

promise1.then(result => console.log(result))

为什么在那之后我在控制台上得到 'succes' 和类似的东西

Promise {<fulfilled>: undefined}

如果我的 promise 返回 'succes' 字符串值,为什么会出现 undefined?这是因为 setTimeout 嵌套?我该如何解决这个问题?

公平地说,您没有显示您获得的代码

Promise {<fulfilled>: undefined}

但我想它可能看起来像这样:

promise1.then(result => {
   console.log(result)
   console.log(promise1); // this line here
})

如果改为这样做:

promise1.then(result => {
   console.log(result)
   console.log(promise1); 
   return result; // now this line here
})

然后你会看到:

Promise {<fulfilled>: "succes"}

@ 马特乌斯 W

1-第一条日志'成功'来自您所写的'console.log(result)'

2 - 第二条日志 'Promise {: undefined}' 引用 'promise1.then(result => console.log(result))',因为 'then' 函数 return 本身就是一个解决的承诺 你 return 在里面的结果(在你的情况下你 return 里面什么都没有 然后 )。

为了确保验证以下代码:

promise1.then(result => console.log(result)).then(result1 => {})

你会得到如下结果

succes
undefined
Promise {<fulfilled>: undefined}

成功后的undefined就是你在'Promise {: undefined}'

中找到的那个

这里对应result1.

不要与您在此处看到的 Promise {<fulfilled>: undefined} 混淆(我的代码的结果),因为这是指 second 然后我链接到您的 然后

总结:您可能会感到困惑,并认为您在控制台中看到的 Promise {<fulfilled>: undefined} 指的是您 promise1常量。 不,不是,它是 then 函数的 return。

通过进行以下调整:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    if(true) {
      resolve('succes')
    } else {
      reject('failure')
    }
  }, 4000)
})

promise1.then(result => {
  console.log(result);
  return result;
})

您将在开发工具上同时拥有日志和承诺 return 价值;

为什么?

undefined 是隐式 return 值回调(return;)的结果,当函数没有显式 return 任何东西时,js 引擎将添加隐式 return 语句到函数体的末尾。