爲什麼會收到以下錯誤:的ReferenceError:結果沒有定義」JavaScript中的ReferenceError消息?
function returnData() {
_myService.getData().then(function(data) {
var result = data;
});
return result;
}
爲什麼會收到以下錯誤:的ReferenceError:結果沒有定義」JavaScript中的ReferenceError消息?
function returnData() {
_myService.getData().then(function(data) {
var result = data;
});
return result;
}
因爲result
聲明中你傳入then
回調它不存在外界
您可以在外面聲明,但請注意,它不會像以後的return result;
行一樣擁有數據:
function returnData(){
var result; // <==== Note
_myService.getData().then(function(data){
result = data; // <==== No `var` here
})
// WON'T HAVE THE VALUE HERE, it's too soon
return result;
}
請參閱How do I return the response from an asynchronous call?爲什麼,以及如何處理它。基本上,你根本不需要returnData
函數,它不會增加任何值(除了可能封裝在_myService
周圍)。它不能return
的值。因此,無論使用_myService
直接,或者如果你想隱瞞,只是
function returnData() {
return _myService.getData();
}
...和使用then
調用代碼來接受它。由於再次,returnData
不能return
的數據。
我想,叫_myService.getData()
你正在對Web服務的異步調用..
在這種情況下,你可以回到你這樣的服務響應數據:
function returnData() {
return _myService
.getData()
.then(function(data) {
// Here you can work with the response data
return data;
});
}
注意,你可以工作在回調中使用response
,正如您正確傳入then
。
爲什麼?有什麼不同?爲什麼這有關係?一個好的答案應該解釋*事情。另外:那個'then'處理程序的目的是零。它應該只是'function returnData(){return _myService.getData(); }「如果它會存在的話(就像我在我的回答中所說的那樣)。 –
兩件事:1.您在我的評論後更改了代碼。你的[原始代碼](http://stackoverflow.com/revisions/43212031/1)有'.then(函數(數據){返回數據;})'這是我指的完全沒有意義的事情。 2.從問題中我們可以看出,新代碼是錯誤的。在問題中沒有跡象表明回調接收的值具有「數據」屬性,或者OP希望取代整個值。這不是更好或更清潔。有時我們可能需要這樣的轉換,但我們沒有理由認爲我們在這裏做。 –
基於我的假設,調用'_myService。getData()'正在對Web服務進行異步調用。 –
@ Yosvel的答案是正確的,原因是因爲您正在向您的服務進行異步調用。
這樣做,你必須等待結果返回給你,然後可以在你的然後函數中處理。
通過進行兩次返回調用,您的返回值未定義,因爲它沒有等待回調函數,而只是返回空值。
可能重複[如何從異步調用返回響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-打電話) – nvioli
@nvioli:這當然是非常密切相關的,但OP詢問的實際錯誤是範圍問題。但是,**非常密切相關。 –