获取包含猫鼬模型数据的列表的函数

时间:2018-06-10 11:33:57

标签: javascript node.js express asynchronous mongoose

我正在尝试在Express中实现一个函数来返回一个包含mongoose模型数据的列表。 'MiModelo'是从Schema创建的猫鼬模型。

//Get data in the DB
function getAllData()
{
    var promesa = MiModelo.find().exec();
    console.log(promesa);
    console.log("---");
    var miLista=[];
    async = require('async');
    async.parallel([function(){
        promesa.then(function(datos)
        {
            datos.forEach(function(dato){
                console.log("dato: " + dato.numero)
                miLista.push(dato.numero);
            });
        });
    }],function(){
        console.log(miLista);
    });
    return miLista;
}

在最后的console.log()中,我能够从数据库中获取所有'numero'字段值,但是当我在其他地方调用此函数时返回为空。我知道这是因为它是异步的。

我已经阅读了这个问题的答案:How to make a function wait until a callback has been called using node.js但我不知道如何调整我的功能。

感谢任何帮助。

感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:0)

整个功能可以简化为几行:

async function getAllData() {
    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
    const datos = await MiModelo.find().exec();

    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
    const miLista = datos.map(dato => dato.numero)

    return miLista;
}

然后你可以这样打电话:

const data = await getAllData()

// or

getAllData().then(data => console.log(data))