あなたのread_data
関数は非同期で、すぐに何かを返さない関数を呼び出しますが、しばらくしてからそれを行います。そのため、関数が完了するまでにまだ存在していないため、単にread_data
関数の値を返すことはできません。また、実際にはread_data
関数自体から何も返さない。
my_model.query(["name"]).all()
には、明示的に非同期タスクであるPromiseが返されます。そのタスク(.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(…)
を使います。