节点JS返回而没有兑现承诺

约书亚·阿沃鲁奇

我希望这是一个简单的问题,而我只是错过了一些简单的事情。我有一连串的承诺返回函数,这些函数使用.then()进行流动。我的最后一个函数接收我返回的数据,并将其格式化为正确的格式,然后将其传递回客户端。我遇到的问题(我认为)是服务器在解决格式功能的承诺之前将ff变量发送给客户端。令我困惑的是,当我记录ff变量时,它正在按预期记录所有数据。

关于这种情况为什么发生,我在做什么错以及最重要的是如何解决这一问题的任何想法?

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);
    });    
});

这是最终的格式数据功能:

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);
            }            
        });
    });
}
约书亚·阿沃鲁奇

这个问题与正确解决承诺无关。问题在于我如何格式化数据以将其发送回客户端。我正在使用以下代码构建关联数组的数组。当将其发送到客户端时,它以空白数组形式发送。

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;

我需要做的是将数据作为对象数组发送,然后在客户端将其转换为数组数组。通过调整我的代码,数据可以根据需要正确传递。

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;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章