你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(…)
在承诺履行后做了些事情。