Callback не является функцией для обновления в Node JS - PullRequest
0 голосов
/ 10 июня 2019

начинающий в Javascript и Node Js здесь.Пытаясь сделать свою первую простую функцию обновления, я получил ошибку:

TypeError: обратный вызов не является функцией.

Я искал ответ в Интернете, но этопроблема остается загадкой.

function UpdateProductsCodes(columns, returnColumns, type, callback) {

    for (var i = 0; i < columns.ids.length; i++) {

        updateSql = "UPDATE TProductCodes SET code =?, product_id =? OUTPUT inserted.id, inserted.code, inserted.product_id INTO #returnValues WHERE ids =?";
        var params = [];

        params.push(columns.codes[i]);
        params.push(columns.product_ids[i]);
        params.push(columns.ids[i]);

        sql.query(conn_str, updateSql, params, function (err, products, more) {
            //Code stops here
            //TypeError: callback is not a function

            if (err) {
                callback(err, null);
                return;
            };
            if (!more) {
                callback(null, products);
            }
        });
    }
}

Эта функция должна выполнять простое обновление, не более того.Используется здесь:

UpdateProductsCodes(req.body.entities, conditions, returnColumns, type, function (err, products) {
if (err) {
    console.dir(err);
    res.writeHead(500, { 'Content-Type': 'application/json' });
    res.write(JSON.stringify(utils.GenerateResponse(err.message, true, 'JSON')));
    res.end();
    return;
}

res.writeHead(200, { 'Content-Type': 'application/json' });
res.write(JSON.stringify(utils.GenerateResponse(products, false, type)));
res.end();
});

1 Ответ

1 голос
/ 10 июня 2019

Проблема в том, что вы просто отправляете неверное количество аргументов при вызове функции.

Функция принимает четыре входа: columns, returnColumns, type, callback.Но в вашем примере вы отправляете пять входных данных: req.body.entities, conditions, returnColumns, type, function (err, products)

Последний (в данном случае функция) поэтому игнорируется.Значение, которое функция получает как значение callback, фактически является именем, которое вы назвали type, когда вызываете функцию, потому что это четвертый аргумент, который вы предоставляете.Это значение не является исполняемой функцией, о чем говорит сообщение об ошибке.

Теперь я не знаю, какие значения вам действительно нужны / которые нужно отправить в функцию, но одно из следующих:они избыточны, и вам нужно удалить их из вызывающего кода.Основываясь исключительно на именах, я бы предположил, что один из req.body.entities или conditions не нужен, но, конечно, я не вижу, что содержат эти переменные, и я не могу быть уверен в ваших намерениях, поэтомувам придется решить это самостоятельно.


PS Я также отмечаю, что ваша функция на самом деле никогда не использует параметры returnColumns или type, которые она получает, поэтому вам, возможно, следует подумать, действительно ли вынужно принять это на всех.Возможно, они могут быть удалены.

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