繁体   English   中英

在 Javascript Promise 中解决和拒绝实际上做了什么

[英]What does resolve and reject actually do in Javascript Promise

起初,我认为resolve只是将参数传递给then的函数,所以我尝试了这个

const promise = new Promise((resolve, reject) => {
  resolve(new Promise(resolve => resolve(2333)))
})
// promise.then(innerPromise => {
//   innerPromise.then(num => console.log(num))
// })
promise.then(num => console.log(num))

注释的行有一个错误: innerPromise.then is not a function ,所以我认为如果你有一个承诺作为参数, resolve将首先帮助你处理内部的承诺

所以我尝试了reject ,我认为它会是一样的

const promise = new Promise((resolve, reject) => {
  reject(new Promise(resolve => resolve(2333)))
})
promise.then(null, innerPromise => {
  innerPromise.then(num => console.log(num))
})
// promise.then(null, num => console.log(num))

未注释的行将记录2333 ,注释的行将仅记录被拒绝的Promise实例

Resolve 是一个回调函数,用于返回另一个 promise 的值或结果。

因此,当您在第一个块中执行以下代码时:

const promise = new Promise((resolve, reject) => {
  resolve(new Promise(resolve => resolve(2333)))
})

promise.then(innerPromise => {
      console.log(innerPromise)
//    innerPromise.then(num => console.log(num))
})

promise.then(num => console.log(num))

你会发现内部函数是由Resolve自动执行的,从而得到resolve内部函数的最终结果。 其次,明确提到“解决”返回“值”而不是可调用对象。 因此,您不能像调用函数那样调用 promise 的结果。

在拒绝的情况下,拒绝回调用于拒绝具有提供的原因或错误的承诺。 您可以返回任何语句(表示错误)或从错误代码返回错误消息的可调用对象。 (这就是我使用 Reject 从生成的错误代码中获取消息的方式)

好吧,你可以在这里阅读更多内容: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

根据定义,resolve can take value 和 thenable value。 如果 thenable 值,它将解析并返回状态。 但是,拒绝仅作为值。 即使重视它承诺(thenable)。 它不会解决它。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve

由这个 Promise 解决的参数。 也可以是 Promise 或 thenable to resolve

Promise.resolve() 方法返回一个使用给定值解析的 Promise 对象。 如果值是一个promise,则返回该promise; 如果值是 thenable(即有一个“then”方法),则返回的 promise 将“跟随”那个 thenable,采用它的最终状态; 否则返回的承诺将用该值实现。 该函数将嵌套的类承诺对象层(例如,解析为解析为某事的承诺的承诺)扁平化为单个层。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject

Promise.reject() 方法返回一个因给定原因被拒绝的 Promise 对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM