Javascript 围绕箭头体承诺的意外块语句

Javascript 围绕箭头体承诺的意外块语句,javascript,promise,ecmascript-6,es6-promise,Javascript,Promise,Ecmascript 6,Es6 Promise,我使用React、ES6并得到以下错误消息。我尝试了不同的东西,但它不适合我。如果删除“return”,则会出现以下错误: 错误-不要对副作用使用“新建”无新建 如果我这样编码 const asyncValidate = (values, dispatch) => { const promise = new Promise(resolve, reject) promise()... 我无法访问构造函数的解析和拒绝 短 如何让这个代码工作 const asyncValidate

我使用React、ES6并得到以下错误消息。我尝试了不同的东西,但它不适合我。如果删除“return”,则会出现以下错误:

错误-不要对副作用使用“新建”无新建

如果我这样编码

const asyncValidate = (values, dispatch) => {
  const promise = new Promise(resolve, reject)
  promise()...
我无法访问构造函数的解析和拒绝


短 如何让这个代码工作

const asyncValidate = (values, dispatch) => {
  return new Promise((resolve, reject) => {
    validation.availableUserEmail(values.email, dispatch)
    .catch(err => reject(err));
  });
};
围绕箭头体箭头体样式的意外块语句出错


如果您只有一个表达式,并且希望返回该表达式,则可以缩短箭头函数,例如,如果您希望函数返回传入+1的数字,这是一个缩短版本:
x=>x+1

newpromise(………)
是一个表达式,您希望返回它,因此您可以(而且应该,这就是ESLint抱怨的原因)将其缩短如下:

(values, dispatch) =>
  new Promise(...........)
此外,由于
validation.availableUserEmail()
本身返回承诺,因此您可以完全删除承诺构造函数(使用承诺构造函数包装承诺是一种反模式),因此您只需执行以下操作:

(values, dispatch) =>
  validation.availableUserEmail(.......)
    .catch(.........)

如果您只有一个表达式,并且希望返回该表达式,则可以缩短箭头函数,例如,如果您希望函数返回传入+1的数字,这是一个缩短版本:
x=>x+1

newpromise(………)
是一个表达式,您希望返回它,因此您可以(而且应该,这就是ESLint抱怨的原因)将其缩短如下:

(values, dispatch) =>
  new Promise(...........)
此外,由于
validation.availableUserEmail()
本身返回承诺,因此您可以完全删除承诺构造函数(使用承诺构造函数包装承诺是一种反模式),因此您只需执行以下操作:

(values, dispatch) =>
  validation.availableUserEmail(.......)
    .catch(.........)

您的第一个代码片段有两个问题。1.
new-new
没有什么意义。2.
Promise
接受通过
resolve
reject
的单个回调。您的第二个代码片段根本不需要
新承诺
。linting错误只是说从arrow函数体周围删除
{}
。也可以从第二个代码段中删除return,因为该函数体是一条语句,并返回其求值结果。最后一个代码块不会解析“new Promise”,但是由于
validation.availableUserEmail
明确返回承诺,因此该函数可以简化为
const asyncValidate=(value,dispatch)=>validation.availableUserEmail(values.email,dispatch)@loganfsmyth抱歉,我复制代码时出错了。但你的第二个建议是对的。@JaromandaX是对的。我怎样才能给你评分呢?你的第一个代码片段有两个问题。1. 
new-new
没有什么意义。2.
Promise
接受通过
resolve
reject
的单个回调。您的第二个代码片段根本不需要
新承诺
。linting错误只是说从arrow函数体周围删除
{}
。也可以从第二个代码段中删除return,因为该函数体是一条语句,并返回其求值结果。最后一个代码块不会解析“new Promise”,但是由于
validation.availableUserEmail
明确返回承诺,因此该函数可以简化为
const asyncValidate=(value,dispatch)=>validation.availableUserEmail(values.email,dispatch)@loganfsmyth抱歉,我复制代码时出错了。但你的第二个建议是对的。@JaromandaX是对的。我怎样才能给你学分呢?谢谢。它甚至可以在没有.catch()的情况下工作,就像JaromandaX早些时候写了一条评论一样。也许第一句话必须改为“…你只有一个表达式,并且你希望返回该表达式,…”@Rodrirokr是的,这似乎是一个打字错误!下次,请随意使用“建议编辑”功能(您还可以获得2分,获得批准的建议编辑;)谢谢。它甚至可以在没有.catch()的情况下工作,就像JaromandaX早些时候写了一条评论一样。也许第一句话必须改为“…你只有一个表达式,并且你希望返回该表达式,…”@Rodrirokr是的,这似乎是一个打字错误!下一次,您可以随意使用“建议编辑”功能(您还可以对已批准的建议编辑获得2分;)