承诺不应该异步

时间:2019-12-26 08:41:32

标签: javascript asynchronous promise

为什么Promise不应该异步?以及我该如何更改此功能? 有了这个,我正在使用gridFS处理一些文件,它按预期工作。但是现在我收到了不使用异步诺言的错误提示。如果我删除async,则该功能不再起作用。

export async function getFiles () {
  await db.connect()
  const Images = db.gfs

  return new Promise(async function (resolve, reject) { // <-- linting error
    Images
      .find()
      .toArray((err, files) => {
        if (err) reject(Error(err))
        else if (!files) reject(Error('Failed to retrieve pending files'))
        if (anyCondition) { resolve(something) }
        else { resolve(files.filter(file => !file.metadata)) }
      })
  })
}

2 个答案:

答案 0 :(得分:1)

这可以与某些功能模块化一起使用:

async function otherGetFiles(){
   await db.connect();
   return await getFiles (db);
}

export function getFiles (db) {
  const Images = db.gfs
  return new Promise(async function (resolve, reject) {
    Images
      .find()
      .toArray((err, files) => {
        if (err) reject(Error(err))
        else if (!files) reject(Error('Failed to retrieve pending files'))

        // do some things here...    
        resolve(files.filter(file => !file.metadata))
      })
  })
}

答案 1 :(得分:0)

请尝试使用此代码。这样可以正常工作,而不会出现任何错误或警告。

export async function getFiles() {
    await db.connect()
    const Images = db.gfs

    return await new Promise(function (resolve, reject) {
        Images
            .find()
            .toArray((err, files) => {
                if (err) reject(Error(err))
                else if (!files) reject(Error('Failed to retrieve pending files'))

                // do some things here...    
                resolve(files.filter(file => !file.metadata))
            })
    })
}