2015-09-03 45 views
0

我打電話func2(應該返回承諾),但承諾沒有得到解決。我解決承諾錯誤或有任何其他問題。請讓我知道什麼是以下問題碼?承諾沒有得到解決,而發送http請求

  function func1() { 

       func2().then(function (data) { 
        console.log(data); 
       }) 

      } 

      var func2 = function() { 
       var d = q.defer(); 
       var postRequest = { 
        host: "abc", 
        path: "/xyz", 
       }; 

       var buffer = ""; 

       var req = http.request(postRequest, function(res) { 
        var buffer = ""; 
        res.on("data", function(data) { 
        console.log("data\n"); 
        buffer = buffer + data; 
        }); 
        res.on("end", function(data) { 
         d.resolve(data); 
         return d.promise; 
        }); 
       }); 

       console.log('after req'); 
       req.write(body); 
       req.end(); 
      }; 
+1

你沒有從你的func2中返回承諾。你不應該在回調中做這件事,但是在函數 –

+0

的最後,我想解決從http.request獲得的數據的承諾。如果我最終解決它,它將爲空。 –

+0

你可以在接收到數據時解決它,但是你在函數的結尾做'return d.promise',這樣你的then語句就可以正常工作 –

回答

3

您需要在函數的最後返回承諾。嘗試

function func1() { 

    func2().then(function (data) { 
     console.log(data); 
    }).catch(function (error) { 
     // Handle any error from all above steps 
     console.log("Got error:" + error); 
    }) 
    .done(); 

} 

var func2 = function() { 
    var d = q.defer(); 
    var postRequest = { 
     host: "abc", 
     path: "/xyz", 
    }; 

    var buffer = ""; 

    var req = http.request(postRequest, function(res) { 
     var buffer = ""; 
     res.on("data", function(data) { 
     console.log("data\n"); 
     buffer = buffer + data; 
     }); 
     res.on("end", function(data) { 
      d.resolve(buffer); 
     }); 
     res.on("error", function(err) { 
      d.reject(err); 
     }); 
    }); 

    console.log('after req'); 
    req.write(body); 
    req.end(); 

    return d.promise; 

}; 
+1

問題是什麼?你改變了什麼? – Bergi

+0

@Bergi我認爲這是相當明顯的,如果你比較的代碼。我不認爲有必要使用這種更復雜的方法。這個問題非常廣泛,通常應該被投票結束,所以我選擇保持簡短。 – Tobi

+1

嗯,那句單句幫助我發現了不同之處 - 感謝編輯!我不喜歡用手比較代碼:-) – Bergi