gpt4 book ai didi

javascript - 为什么 JavaScript Promises 中解析参数排在第一位?

转载 作者:行者123 更新时间:2023-12-01 00:18:24 26 4
gpt4 key购买 nike

我正在学习 javascript Promise。对我来说,JavaScript Promise 的工作方式类似于 callback 函数。

回调函数中,我们通常使用第一个参数作为错误,使用第二个作为错误 成功

那么为什么在 JavaScript Promise 中,参数会有所不同呢?第一个是成功,第二个是错误?这就像回调参数结构的相反,它让我感到困惑。

这不是问题,但我想对此做出解释。如果我错了,那么我错过了什么?

最佳答案

您显然正在谈论 Promise 执行器函数(您传递给 new Promise(...) 的内容)。这只是一种完全不同类型的回调,它与标准的 Node.js 异步回调没有任何共同点。

promise 执行器函数正在向您传递两个独立的函数,您可以稍后调用。两者都不是错误。当您确实出现错误时,您可以调用 reject(err) 并将错误作为第一个参数传递给它。

传递两个事物的另一个地方是 .then() 处理程序,您可以在其中传递解析处理程序和拒绝处理程序。再说一遍,这是完全不同的事情。您向其传递两个函数引用,并且 Promise 基础结构将决定传递哪个回调。当它调用这些回调时,它会将参数作为第一个参数传递。

以下是 Promise 中的两个不同的回调元素:

// promise executor function
let p = new Promise((resolve, reject) => {
// this is passing to your callback two function references.
// there's no error at this point.
// you decide which function to call in your asynchronous operation
});

// then handler
somePromise.then(resolveData => {
// this callback gets called when your promise resolves
// it is known there is no error here, so no need to pass an err parameter
}, rejectErr => {
// this callback gets called when your promise is rejected
// the error is passed as the first argument
// this callback is optional
});

还有 .catch().finally() 处理程序,但它们的工作方式类似,只需要一个回调。

请记住该模式:

 p.then(successHandler, errorHandler)

没有向您传递错误作为第二个参数。您向它传递了两个函数引用,稍后它会调用其中之一。这样,它就不像fs.readFile()那样使用标准的nodejs异步回调。它有完全不同的目的并且工作方式也不同。

关于javascript - 为什么 JavaScript Promises 中解析参数排在第一位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59607780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com