您显然是在谈论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