首页 > 解决方案 > Await Promise.all async 在我的代码中不起作用

问题描述

我有一个具有以下结构的 lambda 函数,它曾经在旧版本的 nodejs 中工作,但它不适用于新版本。我知道我的代码结构非常混乱和错误,但我无法理解它。我正在尝试使用Promise.all,但显然我做错了什么,因为它根本没有被执行。

顺便说一句,我没有收到任何错误。promise.all 方法永远不会被执行。

let AWS = require('aws-sdk');

exports.handler = async(event, context, callback) => {
    let result = {};

    try {

        result = await getOrder(sql, 0);

        result.map(
            (dataField) => {


            });
    }
    catch (error) {
        console.log(error);
        callback(error);
    }

    var today_result = [];
    const groupKey = i => i.user_id + '_' + i.when;
    const counts = _.countBy(followingsIDs, groupKey);
    const isMulti = i => counts[groupKey(i)] > 1;
    const multiPropkey = i => ({ multiplekey: isMulti(i) ? groupKey(i) : groupKey(i) });
    const multiProp = i => ({ multiple: isMulti(i) ? counts[groupKey(i)] : 1 });
    const updated = _.map(followingsIDs, i => _.extend(i, multiProp(i), multiPropkey(i)));


    const uniqResult = _.uniq(updated, function(d) { return d.multiplekey });


    // Doesn’t execute from here —>
    await Promise.all(uniqResult.map(async(dataField) => {

        console.log("test_");

        dosomething()

        if (true) {

            let sql = `INSERT INTO ….`
            result = await getOrder(sql, 0);

            try {
                const data = await sns.publish(params).promise();

            }
            catch (e) {
                console.log(e.stack);
                response.result = 'Error';
            }

        }

    }));

    // Till here <----

    callback(null, uniqResult);


};

let getOrder = async(sql, params) => {
    return new Promise((resolve, reject) => {
        pool.getConnection((err, connection) => {
            if (err) throw err;
            connection.query(sql, params, (err, results) => {
                if (err) {
                    reject(err);
                }
                //      console.log("-----Query Done!");
                connection.release();
                //          console.log("-----Data: ", results);
                resolve(results);
            });
        });
    });
};

标签: node.jsaws-lambdapromise

解决方案


你还在等什么?uniqResult只是被声明为一个空数组。之后立即将其传递给 Promise.all。你需要用 Promise 填充它,然后将它传递给 Promise.all。


推荐阅读