2017-06-02 83 views
2

將服務返回的承諾轉換爲控制器時出現問題。我想要的是從promise中包含的數據創建一個JSON對象數組。以下是我收到的控制器: Data received at controller在JSON對象中轉換承諾

下面是用於打印的數據行:

console.log("controller unmatched: ", unmatched.getData(sFilter)); 

這裏的「無與倫比」的服務,和的getData()是它的功能。

謝謝!

+2

你是問如何從響應得到的數據?假設你正在解析'$ http'的響應而不做任何修改,它就是'Service.someRequest(params).then(function(response){$ scope.data = response.data;},function(err){/*用err * /}做一些事情);' –

回答

1

我相信你真正想要做的就是保存承諾解決的價值,而不是承諾本身。

unmatched.getData(sFilter).then(response => { 
    const json = JSON.stringify(response); 
}); 

這是由於承諾的性質 - 它們是異步的。

Promise對象表示異步操作的最終完成(或失敗)及其結果值。

來源:Promises on MDN

2

承諾工作異步:

unmatched 
    .getData(sFilter) 

    // wait for its resolution 
    .then(data => console.log(JSON.stringify(data)) 
; 
+0

請注意,在這個例子中字符串化數據只是爲了易於閱讀。當你想訪問返回數據的成員時,這是不必要的。 – Shmoopy

+0

你說什麼?我只想記錄結果,解釋如何處理'Promise'返回的值......這僅僅是一個例子,你可以對返回的數據做任何你想做的事情。 – Hitmands

6

承諾表示將提供一些在未來的時間,或從未值。這意味着它的最終價值不能由您的unmatched.getData()函數返回。

你需要做的就是讓unmatched.getData()返回實際的承諾,那麼你時承諾解決採取行動:

unmatched.getData(sFilter).then(function(result) { 
    console.log("controller unmatched: ", result); 
}); 
+0

謝謝!如果我想將這些數據保存到一個變量中,我應該使用$ scope,並且我能夠從這個函數之外訪問它嗎? – VitezKoja

+0

with esnext you can do:'const data = await unmatched.getData(sFilter);' – Hitmands

+0

@VitezKoja在外部範圍內聲明的任何變量。作爲'$ scope'的屬性可以完成這個任務。需要記住的重要一點是,任何依賴於這個變量的行動都需要在承諾解決時採取,而不是在此之前。 –

0

,如果你想從承諾得到JSON對象,我想你可以使用下面的代碼行

response.json()