不确定 javascript 中异步和回调的使用

Unsure about usage of async and callbacks in javascript

描述:

我的 Node-App 中有一个 Mocha 测试,它应该测试 Mongo-DB-JSON-Documents 的 DB-Export 是否正确完成。 在我的测试中,除了其他测试之外,我还测试下载目录是否不为空。

预期结果:

测试应该等待下载,然后才检查目录是否为空。

实际结果:

测试returns总是绿色。

我的问题:

我知道我们有回调,但承诺更好。 我知道 async await 是 promises 的语法糖。 而且我知道甚至还有 RxJS(我在这里不使用)

我必须以某种方式处理来自 mogodb-backup 的回调。 参见 https://www.npmjs.com/package/mongodb-backup

我不明白我做错了什么,所以测试总是变成绿色(运行 与下载并行)

摩卡-test.js

describe('Database.downloadDocumentsOfType_KEYS()', function () {
  it('should result in data/exportFromCosmos/KEYS/admin/ag-data/ not being empty', function () {
    const config = {
      documents: ['DEFAULT', 'KEYS'],         
      exportpathDEFAULT: 'data/exportFromCosmos/DEFAULT/',
      exportpathKEYS: 'data/exportFromCosmos/KEYS/',
      uploadpath: 'data/uploadToAzureBlob/',
      crosscheckFile: 'data/crosscheckFile.txt'
    }

    async function f() {
      await Database.downloadDocumentsOfType_KEYS().then(expect(dir(config.exportpathKEYS + 'admin/ag-data/')).to.not.be.empty)
    }

    f()
  })
})

数据库模块-tested.js

const mongodbbackup = require('mongodb-backup')

const Database = {
  downloadDocumentsOfType_DEFAULT: () => {
  new Promise((resolve) => mongodbbackup({
    uri: process.env.DB_CONNECTION_STRING_READ,
    root: 'data/exportFromCosmos/DEFAULT',
    parser: 'json',
    callback: function(err) {
      if (err) {
        reject()
      } else {
        resolve()
      }
    }
  )}
}
async function f() {
  await Database.downloadDocumentsOfType_KEYS().then(e)
}

f()

这会立即触发异步函数并且

it('...', function (){}) 

立即完成。

所以你需要使用

describe('...',async function(){
  it('...',async function(){
   const f = async function(){
     await Database.downloadDocumentsOfType_KEYS();
     expect(dir(config.exportpathKEYS + 'admin/ag-data/')).to.not.be.empty);
   };
   await f();
  });
});

此外,

new Promise((resolve) => mongodbbackup({...

应该是

new Promise((resolve,reject) => mongodbbackup({

否则拒绝是undefined