首页 > 解决方案 > 带有数组映射的嵌套异步函数,空响应

问题描述

问题是变量arrV在发送到 res 时为空。我尝试.then()在第一次异步或调用return new Promise之后插入函数,(async () => {但结果是一样的。我将粘贴 main 和其他功能:

router.get('/telegram/chats', (req,res,next) => {
    let arrV = [];
    (async () => {
        let q = await Telegram.getChats();
        Object.keys(q).map(async (k, v) => {
            let search = await MTel.getChatById(q[k].id,(r) => {
                if(!r){
                    MTel.insertChat([q[k].id,q[k].title,q[k].last_message,0], (p) => {
                        arrV.push(p);
                    })
                }
            });
        });
    })();

    res.send(arrV);
});

Telegram.getChats():

async function getChats(options) {
    let ret = [];
    let ok = await client.getChats();
    for(var k in ok["chat_ids"]){
        let ch = await client.getChat(ok["chat_ids"][k]);
        ret.push({id: ch.id, title: ch.title, last_message: ch["last_message"].id});
    }
    return ret;
}

Mtel.getChatById() 和 Mtel.insertChat():

const getChatById = (id,callback) => {
    let qq = db.select(table,{id_chat: id},"LIMIT 0,1", (r) => {
        return callback(r);
    })
}

const insertChat = (obj,callback) => {
    let qq = db.insert(table,["id_chat","title","last_message","active"],[obj], (r) => {
        return callback(r);
    })
}

谢谢你。

标签: arraysnode.jsfunctionasync-await

解决方案


推荐阅读