Ожидаемая асинхронная функция Nedb

#javascript #nedb

#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:

Вам нужно поместить 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);
        });
    });
}
  

Комментарии:

1. Я не хочу считать до одного.

2. @m23 что вы имеете в виду? Это все еще увеличивается для каждого пакета.