Элементы списка JavaScript несовместимы после отправки в базу данных - PullRequest
0 голосов
/ 07 мая 2019

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

Проблема в том, что он работает нормально, не вызывая мою функцию базы данных add_block, которая добавляет новый блок в базу данных. Но после добавления вызова add_block все новые блоки, которые я создаю с помощью функции ajax, становятся пустыми, в отличие от транзакции. Странно то, что блок не пустой и правильно добавлен в базу данных.

Функция add_block возвращает обещание после добавления блока в базу данных.

Я распечатал блокчейн до и после вызова функции add_block. Перед вызовом новый блок будет правильно отображаться с новой транзакцией в нем. Но после вызова новый блок будет отображаться, но без транзакций в нем вообще. И любые будущие вызовы ajax также будут отображать пустые блоки.

--- Это функция ajax, работающая на сервере узла ---

app.post("/transact", function(request, response) {

    let sendAddress = jerryWalletAddress;
    let getAddress = benWalletAddress;
    let amount = 5;

    let thisTransaction = new Transaction(sendAddress, getAddress, amount);
    // adds the transaction to a pending list
    testChain.addTransaction(thisTransaction);

    // creates a block object holding all transactions in the pending list
    testChain.minePendingTransactions(jerryWalletAddress);

    // This will print the correct output    
    testChain.printChain();

    // This is the db function that adds the block to a db
    blockchainDB.add_block(testChain.chain[testChain.chain.length-1]).then(()=> {
        // This will print the incorrect output
        testChain.printChain();
    });
});

Предполагается, что перед вызовом ajax есть 2 действительные транзакции:

Правильный список при вызове printChain () выглядит примерно так:

Блок 1

-Транзакция 1

Блок 2

-Транзакция 1

Блок 3

-Транзакция 1

Неправильный список при повторном вызове printChain() выглядит примерно так:

Блок 1

-Транзакция 1

Блок 2

-Транзакция 2

Блок 3

Блок 4

Блок 5

1 Ответ

0 голосов
/ 07 мая 2019

Так что, очевидно, моя функция add_block фактически выталкивает транзакцию из массива транзакций в блоке при добавлении в базу данных.

Мне очень помогло использовать отладчик VSCode для запуска кода моего узла, чтобы точно определить, где он вышел из строя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...