你read_data
功能是異步的,它調用一個函數,不會立即返回的東西,但只會做了一段時間後。因此你不能僅僅從你的read_data
函數返回值,只是因爲它現在還沒有由函數完成的時間。另外,你實際上不會從read_data
函數本身返回任何東西。
你叫my_model.query(["name"]).all()
這顯然會返回一個承諾,一個異步任務。完成該任務(.then(…)
)後,您將調用一個函數,該函數將數據註銷並返回一個值。
到目前爲止好,這使得整個事情返回一個承諾本身,該值data[0].name
一旦查詢完成的承諾。然而,這個承諾永遠不會被退回,所以你無法知道什麼時候發生。
爲了解決這個問題,簡單地從read_data
返回整個事情:
read_data: function() {
// return the resulting promise here
// ↓↓↓↓↓↓
return my_model.query(["name"]).all().then(function(data){
console.log('dataa',data);//Here print value
return data[0].name
});
}
這使得read_data
正確異步本身並使其返回結果的承諾。所以,現在你可以消耗這一承諾在您的init
功能:
init: function(parent){
this.read_data().then(function (value) {
console.log('value', value);
});
}
由於read_data()
回報的承諾,我們必須等待它的結果,一旦承諾得到解決,只能採取行動。爲此,我們再次使用.then(…)
在承諾履行後做了些事情。