首页 > 解决方案 > @typescript-eslint/no-misused-promises 和 new Promise(() => return resolve())

问题描述

我从firebase functions samples获得的函数中有一个 Promise(() => return resolve()) 模式。

const appendPromise = (requestWithoutAuth: {
  spreadsheetId: any
  range: string
  valueInputOption: string
  insertDataOption: string
  resource: { values: any[][] }
}): Promise<any> => {
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
  return new Promise((resolve, reject) => {
    return getAuthorizedClient().then((client) => {
      const sheets = google.sheets('v4')
      const request = requestWithoutAuth
      request.auth = client
      return sheets.spreadsheets.values.append(request, (err: any, response: { data: unknown }) => {
        if (err) {
          console.log(`The API returned an error: ${err}`)
          return reject(err)
        }
        return resolve(response.data)
      })
    })
  })
}

eslint 抱怨@typescript-eslint/no-misused-promises

我不习惯,用 Promise.resolve() 替换 new Promise() 就足够了吗?

谢谢

标签: firebasepromiseasync-awaites6-promisetypescript-eslint

解决方案


我相信 linter 的问题是您Promise 构造函数中使用了 Promise。使用异步函数并将 Promise 构造函数移动一个缩进:

const appendPromise = async (requestWithoutAuth: {
  spreadsheetId: any
  range: string
  valueInputOption: string
  insertDataOption: string
  resource: { values: any[][] }
}): Promise<any> => {
  const client = await getAuthorizedClient();
  return new Promise((resolve, reject) => {
      const sheets = google.sheets('v4')
      const request = requestWithoutAuth
      request.auth = client
      return sheets.spreadsheets.values.append(request, (err: any, response: { data: unknown }) => {
        if (err) {
          console.log(`The API returned an error: ${err}`)
          return reject(err)
        }
        return resolve(response.data)
      })
  })
}


推荐阅读