【问题标题】:javascript function callbacks, does argument (error, response, body) order matter?javascript函数回调,参数(错误,响应,正文)顺序重要吗?
【发布时间】:2018-10-11 06:41:53
【问题描述】:

在 javascript 中,一个用于执行回调或为异步函数返回 Promise... 我只是想知道,这如何与回调或承诺中的参数一起工作,我的意思是人们经常看到这样的事情:

function (error, response, body)  {..}

这里定义了回调参数的顺序吗?或者说:javascript是否以某种方式“知道”什么是“错误”参数以及其他什么? javascript中是否有保留关键字,例如“error | err | e”等?

例如,我在这里看到了这段代码:

const bcrypt = require('bcrypt');
const password = 'Top Secret'; 

bcrypt.hash(password, 10, (err, hash) => {
  if (err) {
    throw err;
  }
  console.log('Your hash: ', hash);
});

其中“err”是第一个参数,数据是第二个,但是:

bcrypt.hash(password, 10).then(
  hash => {
    console.log('Your hash: ', hash);
  },
  err => {
    console.log(err);
  }
);

显然 hash 是 promise 中的第一个参数,而 err 是第二个参数,所以我的问题是:javascript 通常如何知道错误和其他参数是什么?有相关的文档或指南吗?

【问题讨论】:

  • 没有。回调是正常的函数。函数接收哪些参数以及以何种顺序由函数的调用者确定。但是,Node.js 确实有将错误对象作为第一个参数传递的约定。
  • .then() 的签名是.then(successFn, errorFn)。在上面的最后一个例子中,hasherr 都是它们各自函数的第一个参数。您可以使用任何您喜欢的成员名称,例如donald_duckmiss_marple(但请不要)

标签: javascript error-handling callback promise


【解决方案1】:

这里定义了回调参数的顺序吗?

是的:它在request 函数的文档中给出,因为这就是它调用回调的方式。

或者说:javascript是否以某种方式“知道”什么是“错误”参数以及其他什么? javascript中是否有保留关键字,例如“error | err | e”等?

没有。该语言没有为任何参数名称赋予特殊含义。

“err”是第一个参数,数据是第二个

这只是一个(非常普遍)约定,记录在Why does node prefer error-first callback?https://docs.nodejitsu.com/articles/errors/what-are-the-error-conventions/http://nodeguide.com/style.html#callbacks

显然 hash 是 promise 的第一个参数,err 是第二个参数

不,这只是 promise then method 接受两个回调,一个用于成功,一个用于错误情况。参数的名称(或是否有任何参数)无关紧要。

【讨论】:

  • 啊,谢谢很好的解释,好的,它基本上只是“then”函数签名(resolve,reject),而在 node 中则相反......有点令人困惑的东西
  • @user2883596 这不是“反过来”。 then 的签名是 (onFulfillment, onRejection?) - 一个或两个带有一个参数的回调 - 而节点签名是 onFinish - 一个带有两个参数的回调,第一个不是可选的。
猜你喜欢
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多