为什么 resolve 参数在 JavaScript Promises 中排在第一位?
Why resolve parameter comes first in JavaScript Promises?
我正在学习 javascript Promises。在我看来,JavaScript Promise
的工作方式类似于 callback
函数。
在callback
函数中,我们通常使用第一个参数作为error
,第二个 ] 作为 success
.
那为什么在JavaScriptPromise
中参数来的不一样呢?第一个是 success
,第二个是 error
?这就像 callback
参数结构的反面,让我感到困惑。
这不是问题,但我想对此作出解释。如果我错了,那我错过了什么?
您显然是在谈论 Promise 执行器函数(传递给 new Promise(...)
的内容)。这只是一种完全不同的回调类型,它与标准 node.js 异步回调没有任何共同之处。
promise 执行器函数正在向您传递两个您稍后可以调用的单独函数。两者都不是错误。当您确实遇到错误时,您调用 reject(err)
并将错误作为第一个参数传递给它。
另一个传递两个东西的地方是 .then()
处理程序,您可以在其中传递解析处理程序和拒绝处理程序。同样,这是完全不同的事情。您向它传递两个函数引用,承诺基础结构将决定传递哪个回调。当它调用这些回调时,它会将参数作为第一个参数传递。
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 请求或其他一些事件发生,一旦发生,Promise 就会进入其他两种状态之一,resolved 或 rejected.
以上不是 Node 标准库回调的目的和功能,这些回调在作为文件系统一部分的函数内部使用 API。 read()
、readdir()
等这些特定函数有三个参数可以传递给它,一个是可选的,第三个是你所说的回调。
使用文件系统函数时,Node 标准库回调的模式是在该回调参数中提供两个参数,第一个始终是错误对象,err
,现在不能保证错误是将会发生,相反,如果在打开某些文件时出现问题,Node 将使用 err
对象的第一个参数调用回调。
如果没有错误,那么第一个参数将改为 null。
现在回调函数的第二个参数将是我实际要查找的数据。
https://nodejs.org/api/fs.html#fs_file_system
你看,你说的是两个不同的回调。
我正在学习 javascript Promises。在我看来,JavaScript Promise
的工作方式类似于 callback
函数。
在callback
函数中,我们通常使用第一个参数作为error
,第二个 ] 作为 success
.
那为什么在JavaScriptPromise
中参数来的不一样呢?第一个是 success
,第二个是 error
?这就像 callback
参数结构的反面,让我感到困惑。
这不是问题,但我想对此作出解释。如果我错了,那我错过了什么?
您显然是在谈论 Promise 执行器函数(传递给 new Promise(...)
的内容)。这只是一种完全不同的回调类型,它与标准 node.js 异步回调没有任何共同之处。
promise 执行器函数正在向您传递两个您稍后可以调用的单独函数。两者都不是错误。当您确实遇到错误时,您调用 reject(err)
并将错误作为第一个参数传递给它。
另一个传递两个东西的地方是 .then()
处理程序,您可以在其中传递解析处理程序和拒绝处理程序。同样,这是完全不同的事情。您向它传递两个函数引用,承诺基础结构将决定传递哪个回调。当它调用这些回调时,它会将参数作为第一个参数传递。
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 请求或其他一些事件发生,一旦发生,Promise 就会进入其他两种状态之一,resolved 或 rejected.
以上不是 Node 标准库回调的目的和功能,这些回调在作为文件系统一部分的函数内部使用 API。 read()
、readdir()
等这些特定函数有三个参数可以传递给它,一个是可选的,第三个是你所说的回调。
使用文件系统函数时,Node 标准库回调的模式是在该回调参数中提供两个参数,第一个始终是错误对象,err
,现在不能保证错误是将会发生,相反,如果在打开某些文件时出现问题,Node 将使用 err
对象的第一个参数调用回调。
如果没有错误,那么第一个参数将改为 null。
现在回调函数的第二个参数将是我实际要查找的数据。
https://nodejs.org/api/fs.html#fs_file_system
你看,你说的是两个不同的回调。