为什么在JavaScript Promises中首先使用resolve参数?

我正在学习javascript Promises。在我看来,JavaScript Promise的工作原理类似于callback函数。

callback函数中,通常将 first 参数用作error,将 second 用作success

然后,为什么在JavaScript Promise中,参数会有所不同?首先是success,第二是error?就像callback参数结构的相反,它使我感到困惑。

这不是问题,但是我想对此进行解释。如果我错了,那我想念什么?

happysxin 回答:为什么在JavaScript Promises中首先使用resolve参数?

您显然是在谈论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承诺回调与Node标准库API中的回调设计模式混淆了。它们不一样。

JavaScript许诺的目的是处理长时间运行的进程,我们需要一些能力来确定进程何时完成才能继续运行下一个代码段。

因此,您要了解的Promises回调中有3种状态:未解决已解决已拒绝

默认情况下,Promise存在于未解决的状态,这意味着您刚刚完成了Promise,并且您正在等待某些事情发生,诸如Ajax请求之类的长时间运行的过程或一旦发生的其他事件, “承诺”进入其他两种状态之一,即已解决已拒绝

以上内容不是节点标准库的回调的用途和功能,这些功能在文件系统API一部分的函数内部使用。这些特定的功能,例如read()readdir()等,可以传递给它三个参数,一个是可选参数,第三个是您所说的回调。

使用文件系统功能时,Node标准库回调的模式是在该回调参数中提供两个参数,第一个始终是错误对象err,现在它不能保证错误将发生,而是如果打开某些文件时出了点问题,Node将使用err对象的第一个参数来调用回调。

如果没有错误,则第一个参数将改为null。

现在,回调函数的第二个参数将是我实际上正在寻找的数据。

https://nodejs.org/api/fs.html#fs_file_system

您会看到,您正在谈论两个不同的回调。

本文链接:https://www.f2er.com/2814824.html

大家都在问