почему мой массив пуст? - PullRequest
       2

почему мой массив пуст?

0 голосов
/ 27 апреля 2018

Я не могу понять, почему мой массив пуст, пока консоль показывает вывод:

Я извлекаю данные из динамодаба и пытаюсь создать модифицированный ответный массив json, я могу распечатать значения ответа динамодб, но когда я помещаю его в массив, возвращаемый массив пуст, вот мой код.

Вот файл 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 голосов
/ 27 апреля 2018

Предполагая, что 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();
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...