Promise. return resolve()和resolve()有什么区别?

59

有人看到了这个例子:

return new Promise( (resolve, reject) => {
  fs.readFile(file, (err, data) => {
    if (err) reject(err)
    return resolve(data)
  })
})

但我通常这样做:

return new Promise( (resolve, reject) => {
  fs.readFile(file, (err, data) => {
    if (err) reject(err)
    resolve(data)
  })
})

有区别吗?


2
这里不会有任何影响。 - elclanrs
1
我认为在第一种情况下,你可以链接,但在第二种情况下,你不能。 - Thành Chung Bùi
1个回答

79

return resolve() 就像普通的 return 一样结束函数的执行,这取决于你代码的流程。如果你不想或者不需要在函数中再执行任何代码,那么使用 return 来退出函数即可。

return new Promise( (resolve, reject) => {
  fs.readFile(file, (err, data) => {
    if (err) reject(err)
    return resolve(data)
    console.log('after return') // won't execute
  })
})

只有resolve才能创建一个成功的promise状态,但如果没有使用return,则会执行代码。请记住,resolve()reject()创建了promise状态,一旦状态被创建,就不能更改,.then.catch处理程序用于进一步执行,是否使用return完全取决于您的代码流程。如果您不想在该块中执行更多代码,则返回return resolve()
return new Promise( (resolve, reject) => {
  fs.readFile(file, (err, data) => {
    if (err) reject(err)
    resolve(data)
    console.log('after return') // will execute
  })
})

它与普通的return语句在function中是一样的,与Promise没有任何关系。


1
展示它们在创建.then状态时的反应会很有用——即一个会失败,一个不会。 - brandonscript
2
如果出现错误,则调用 reject(error) 而不是返回,那么下一条语句 return resolve(data) 会被执行吗?如果是,那么会有什么后果? - Gautam Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接