等待Nedb异步功能

时间:2019-03-03 16:25:45

标签: javascript nedb

async function count() {
        let nedb = <<functional nedb database>>
        let count = 0
        await iterate(nedb, {}, g=>{
            count++
        })
        console.log(count)


iterate(xx, query, callback) {
    return new Promise((res, rej)=> {
        pkgs.find(query).exec((err, res)=>{
            if(err!==null) {
                this.err(err)
            } else {
                res.forEach((pkg)=>{
                    callback(pkg)
                })
            }
        })
        res()
    })

在迭代结束后,我想写点东西,有没有办法以某种正常的方式来做呢?

1 个答案:

答案 0 :(得分:0)

您需要将res() olve调用放入find回调中。立即履行对undefined的承诺将无济于事。

但是您真的根本不应该传递迭代回调。相反,写

async function count() {
    let nedb = …;
    let count = 0;
    const pkgs = await query(nedb, {});
    pkgs.forEach(pkg => count++);
    // or maybe better just:
    const count = pkgs.length;
    console.log(count);
}

function query(pkgs, query) {
    return new Promise((resolve, reject)=> {
        pkgs.find(query).exec((error, result)=>{
            if (error !== null) reject(error);
            else resolve(result);
        });
    });
}