诺言。 return resolve()和resolve()有什么区别?

时间:2017-02-20 16:13:25

标签: javascript node.js promise

某个地方读了这个例子:

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 个答案:

答案 0 :(得分:30)

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()创建承诺状态,一旦创建状态就无法更改,.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语句相同,与承诺无关

答案 1 :(得分:0)

这里没有什么区别,但是如果您想在解决之后做一些事情,请参阅MDN页面底部的示例:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve