JavaScript Promises 混淆反模式?

une*_*asy 7 javascript promise

我花了一整天的时间试图弄清楚我错误地使用了 Promise 的天气。

那是反模式吗?

export const myExample = (payload) => {
  return new Promise((resolve, reject) => {})
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样在承诺中使用异步吗?

export const myExample = (payload) => {
  return new Promise(async (resolve, reject) => {})
}
Run Code Online (Sandbox Code Playgroud)

这也是错的吗?假设添加 async 使其成为默认的承诺,

export const myExample = async (payload) => {
  return new Promise((resolve, reject) => {})
}
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,我是否应该只从与解析相同的函数返回,如果我抛出错误将被拒绝,所以它看起来像那样?

export const myExample = async (payload) => {
  if(payload) return true
  else throw new Error('Promise rejection?')
}
Run Code Online (Sandbox Code Playgroud)

那么 first 和 last 是一样的吗?

t.n*_*ese 3

export const myExample = (payload) => {
  return new Promise((resolve, reject) => {})
}
Run Code Online (Sandbox Code Playgroud)

只能用于将不基于 Promise 但异步返回结果的代码转换为 Promise。

export const myExample = (payload) => {
  return new Promise(async (resolve, reject) => {})
}
Run Code Online (Sandbox Code Playgroud)

一个anty模式async是否已经创建了一个返回Promise的函数,并且您在这里打破了promise链。

export const myExample = async (payload) => {
  return new Promise((resolve, reject) => {})
}
Run Code Online (Sandbox Code Playgroud)

与第一个相同,new Promise只能用于将不基于 Promise 的代码转换为异步返回结果的 Promise。是否async可以提交取决于该函数中的其他代码。new Promise((resolve, reject) => {})但如果您需要使用封闭函数,则最好只包含并返回该函数new Promise,就像第一个示例中那样。

另外,如果是这种情况,我是否应该从与解析相同的函数返回,如果我抛出错误将被拒绝,所以它看起来像那样?

是的