第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Node JS 在沒有履行承諾的情況下返回

Node JS 在沒有履行承諾的情況下返回

守著星空守著你 2022-06-05 16:26:25
我希望這是一個(gè)簡單的問題,而我只是錯(cuò)過了一些簡單的問題。我有一系列使用 .then() 的 promise 返回函數(shù)。我的最終函數(shù)獲取我返回的數(shù)據(jù),并將其格式化為正確的格式,然后將其傳遞回客戶端。我遇到的問題(我認(rèn)為)是服務(wù)器在格式化函數(shù)的承諾得到解決之前將 ff 變量發(fā)送到客戶端。讓我感到困惑的是,當(dāng)我記錄 ff 變量時(shí),它會(huì)按預(yù)期記錄所有數(shù)據(jù)。關(guān)于為什么會(huì)發(fā)生這種情況,我做錯(cuò)了什么以及最重要的是如何解決這個(gè)問題的任何想法?app.get("/subData", function(req, res) {    getConnection().then(function() {        return getSQL();    }).then(function(sql) {        return executeQuery(sql);    }).then(function(data) {        return formatData(data);    }).then(function(ff) {        console.log(ff);        res.status(200).send(ff);    }).catch(function(err) {        console.log("ERR:");        console.log(err);        res.status(405).send(err);    });    });這是最終的格式數(shù)據(jù)函數(shù):function formatData(data) {    var finArr = Array();    return new Promise(function(resolve, reject) {        data.rows.forEach(function(row, fin) {            var tempArr = Array();            row.forEach(function(itm, pos) {                var ttl = data.metaData[pos].name;                var val = itm;                tempArr[ttl] = val;            });            finArr.push(tempArr);            if(fin + 1 == data.rows.length) {                resolve(finArr);            }                    });    });}
查看完整描述

2 回答

?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊

很明顯,您的一個(gè)承諾沒有解決。為什么要resolve()在您的formatData()方法中進(jìn)行有條件的調(diào)用?為什么不讓循環(huán)用完?


function formatData(data) {

    var finArr = Array();


    return new Promise(function(resolve, reject) {

        data.rows.forEach(function(row, fin) {

            var tempArr = Array();


            row.forEach(function(itm, pos) {

                var ttl = data.metaData[pos].name;

                var val = itm;


                tempArr[ttl] = val;

            });


            finArr.push(tempArr);    

        });

        resolve (finArr);

    });

}

事實(shí)上,這里根本不需要 Promise,因?yàn)樗且粋€(gè)同步操作。而且,可以在.next()鏈中使用同步操作。像這樣。


function formatData(data) {

    var finArr = Array();


    data.rows.forEach(function(row, fin) {

        var tempArr = Array();

        row.forEach(function(itm, pos) {

            var ttl = data.metaData[pos].name;

            var val = itm;

            tempArr[ttl] = val;

        });

        finArr.push(tempArr);    

    });

    return finArr;

}


查看完整回答
反對(duì) 回復(fù) 2022-06-05
?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

該問題與正確解決的承諾無關(guān)。問題在于我如何格式化我的數(shù)據(jù)以發(fā)送回客戶端。我正在使用以下代碼構(gòu)建一個(gè)關(guān)聯(lián)數(shù)組的數(shù)組。當(dāng)它被發(fā)送到客戶端時(shí),它被作為一個(gè)空白數(shù)組發(fā)送。


data.rows.forEach(function(row, fin) {

        var tempArr = Array();

        row.forEach(function(itm, pos) {

            var ttl = data.metaData[pos].name;

            var val = itm;

            tempArr[ttl] = val;

        });

        finArr.push(tempArr);    

    });

    return finArr;

我需要做的是將數(shù)據(jù)作為對(duì)象數(shù)組發(fā)送,然后在客戶端將其轉(zhuǎn)換為數(shù)組數(shù)組。通過將我的代碼調(diào)整為此,數(shù)據(jù)可以根據(jù)需要正確傳遞。


data.rows.forEach(function(row, fin) {

    // Change From var tempArr = Array() to var tempArr = {} to initialize new Object

    var tempArr = {};


    row.forEach(function(itm, pos) {

        var ttl = data.metaData[pos].name;

        var val = itm;


        tempArr[ttl] = val;

    });

    finArr.push(tempArr);    

});

return finArr;


查看完整回答
反對(duì) 回復(fù) 2022-06-05
  • 2 回答
  • 0 關(guān)注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)