簡體   English   中英

將參數從一個函數傳遞到request.on nodejs

[英]passing argument from one function to request.on nodejs

我是nodejs / javascript的新手,並嘗試從函數傳遞值。

下面是我的request.on函數(在構建JSON數組時,我需要獲取favoriteStn值並將其傳遞給它)

  response.on('end', function () {
             str = JSON.parse(str);
        var summariesJSON = str[0].summaries
          var resToSend = [];

            for(var i in summariesJSON) {

                var item = summariesJSON[i];
                var favoriteStn = findifFavorite (usernameFrmQuery,item.device_id,function(value){
                        favoriteStn = value;

                    });
                    resToSend.push({ 
                    "lat" : item.lat,
                    "lng"  : item.ln,
                    "count"       : item.count,
                    "status" : item.status,
                    "id" :   item.id,
                    "name"  :   item.name,
                    "address"   :   item.address,
                    "favoriteStn" : favoriteStn,
                    "fav_count" : findFavCount
                });
            } 
    res.send(resToSend);
  });


function findifFavorite (username,stationId,cb) {
    var options = {
    };
            ddb.getItem(chgStationfavorite, username, String(stationId), options, function(err, getitemRes, cap) {
            if (err) {
                cb("Failure" + err);
                } else if(typeof(getitemRes) != 'undefined'){

                cb("Y");
            }
                else {

                cb("N");
                }

        });

}

問題是我什么都沒有為favoriteStn創建任何東西,我知道它正在進入函數並提供值,因為我可以通過console.log看到它

您能幫我如何使用回調並使它正常工作嗎?

您必須考慮到node.js中的所有內容都是異步的。

在您的情況下, findifFavorite執行時間花費更多時間,並且該值不適用於該數組。

這是修復代碼的方法,您必須在回調函數中移動resToSend數組。

開始閱讀有關Promise的更多信息https://github.com/petkaantonov/bluebird,這樣您就不會陷入回調地獄。

                var favoriteStn = findifFavorite (usernameFrmQuery,item.device_id,function(value){
                    favoriteStn = value;

                        resToSend.push({ 
                           "lat" : item.lat,
                            "lng"  : item.ln,
                           "count"       : item.count,
                           "status" : item.status,
                           "id" :   item.id,
                           "name"  :   item.name,
                           "address"   :   item.address,
                           "favoriteStn" : favoriteStn,
                           "fav_count" : findFavCount
                         });

                        res.send(resToSend);


                });

暫無
暫無

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

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