承诺。 return resolve() 和 resolve() 有啥区别?

Posted

技术标签:

【中文标题】承诺。 return resolve() 和 resolve() 有啥区别?【英文标题】:Promise. What is the difference between return resolve() and resolve()?承诺。 return resolve() 和 resolve() 有什么区别? 【发布时间】:2017-07-10 00:20:32 【问题描述】:

在某处读过这个例子:

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)
  )
)

有区别吗?

【问题讨论】:

这里不会有什么不同。 我认为在第一种情况下,你可以链接,但在第二种情况下,你不能 【参考方案1】:

return resolve() 将像正常的return 一样结束函数执行,这取决于您的代码流,如果您不希望或不需要在您的函数中执行更多代码,则使用@ 987654323@退出函数

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
  )
)

它与function 中的普通return 语句相同,与promise 无关

【讨论】:

展示它们在.then 状态创建时的反应会很有用——即一个会失败,一个不会。 如果有错误,那么我们调用reject(error) 并且没有返回那里,那么下一条语句是否会被执行-return resolve(data)?如果是,那么它的影响是什么?

以上是关于承诺。 return resolve() 和 resolve() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

异步函数 - 等待不等待承诺

返回已经解决的承诺

承诺回调返回承诺

为啥一个已解决的承诺仍处于待处理状态?

正确使用 Promise.resolve().then() 错误:未捕获(在承诺中):TypeError:无法读取属性

JS基础——Promise基本使用