簡體   English   中英

回調不是Node JS中的更新功能

[英]Callback is not a function for update in Node JS

在這里用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();
});

問題是調用函數時,您只是發送了錯誤數量的參數。

該函數接受四個輸入: columns, returnColumns, type, callback 但是在您的示例中,您將發送五個輸入: req.body.entities, conditions, returnColumns, type, function (err, products)

因此將忽略最后一個(在這種情況下為函數)。 實際上,該函數作為callback值接收的值就是您在調用該函數時已命名的type ,因為這是您提供的第四個參數。 此值不是可執行函數-錯誤消息告訴您的內容。

現在,我不知道您實際需要/想要將哪些值發送給函數,但是顯然其中之一是多余的,您需要將其從調用代碼中刪除。 純粹基於名稱,我猜想req.body.entitiesconditions之一,但是我當然看不到這些變量包含什么,也無法確定您的意圖,所以您必須自己解決。


PS我還注意到,您的函數從不實際使用它接收到的returnColumnstype參數,因此您可能應該考慮是否真的需要接受這些參數。 也許可以將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM