【发布时间】:2020-12-04 03:39:39
【问题描述】:
我花了一整天的时间来弄清楚我错误地使用了 Promises 的天气。
这是反模式吗?
export const myExample = (payload) => {
return new Promise((resolve, reject) => {})
}
我可以像这样在 Promise 中使用异步吗?
export const myExample = (payload) => {
return new Promise(async (resolve, reject) => {})
}
这也是错的吗?假设添加 async 使其默认成为一个 Promise,
export const myExample = async (payload) => {
return new Promise((resolve, reject) => {})
}
如果是这种情况,我是否应该从与解析相同的函数返回,如果我抛出错误将被拒绝,所以看起来像这样?
export const myExample = async (payload) => {
if(payload) return true
else throw new Error('Promise rejection?')
}
那么 first 和 last 是一样的吗?
【问题讨论】:
-
new Promise(async (resolve, reject)总是“代码味道”... -
你不应该在定义 Promise 时使用 async await,这些应该只在执行 Promise 时使用,不清楚你想做什么以及你的问题是什么
-
这不是问题,我正在为我的应用做出自己的承诺。但在这些承诺中,我想使用数据库调用或 fs 异步调用,例如等待
fs.writeFile()所以你是说我不应该在 Promise 里面有await?所以只需使用 fs.writeFile().then().catch() ? -
第二个和第三个可以写成
async (payload) => {},不知道微任务世界会不会有一些不同,... async await 使用 try catch finally,也是 fs.promises ;)跨度> -
Never pass an
async functionas the executor tonew Promise,其他都还好。 (你可能并没有真正构建一个永远不会解析的new Promise,你实际上在里面做了一些事情,对吧?)
标签: javascript promise