为什么我的数组是空的?

时间:2018-04-27 10:51:10

标签: javascript arrays node.js callback

我无法弄清楚为什么我的数组在控制台显示输出时为空:

我从dynamodb获取数据并尝试创建一个修改后的响应json数组我可以打印dynamodb响应的值但是当我将它推入数组时,返回的数组为空,这是我的代码。

这是Util.js文件

const dynamo = require('./dynamo.js')
var myjson = [];
exports.myjson = [];
exports.maketimetabledata = function(callback) {


    var table = "timetable";
    for (i = 1; i <= 2; i++) {
        dynamo.docClient.get({
            TableName: table,
            Key: {
                "id": i
            }
        }, function(err, data) {
            if (err) {
                console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
                return err;
            } else {
                dynamores = JSON.parse(JSON.stringify(data));
                myjson.push(i);
            }
        });

        console.log(myjson);

    }

    callback("done");

};

这是我的部分索引文件:

app.get('/', (req, res) => {
    var myjson = [];
    util.maketimetabledata(function(returnvalue) {
        if (returnvalue) {
            console.log(util.myjson);
        }
    });
});

输出:

[] [] [] 
undefined 
{ response from dynamo db for debugging purpose}

1 个答案:

答案 0 :(得分:0)

假设dynamo.docClient.get()返回Promise,您可以使用Promise.all()等待所有承诺完成,然后调用callback方法。

//Use Promise.all()
exports.maketimetabledata = function (callback) {
    var table = "timetable";
    for (i = 1; i <= 2; i++) {
        var table = "timetable";
        var promiseArray = [];
        for (i = 1; i <= 2; i++) {
            var promise = dynamo.docClient.get({
                    //Your code
                });
            promiseArray.push(promise)
        }

        console.log(myjson);
    }
    Promise.all(promiseArray).then(function () {
        callback(myjson);
    });

};



//Usage
util.maketimetabledata(function (myjson) {
    if (returnvalue) {
        console.log(myjson);
    }
});

如果方法未返回Promise

var promise = new Promise(function (resolve, reject) {
    dynamo.docClient.get({
        TableName: table,
        Key: {
            "id": i
        }
    }, function (err, data) {
        if (err) {
            console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));

            reject();
            return err;
        } else {
            dynamores = JSON.parse(JSON.stringify(data));
            myjson.push(i);

            resolve();
        }
    });
});