当我console.log
一个promise的值时,我得到了值,但是长度返回0.如果我提醒值,则promise返回,但是为空。
this.findClosestRiderToUser().then( data => {
console.log( data );
//alert ( data ) not working , returns empty
//console.log( data.length ) returns 0
})
//here is the promise code
findClosestRiderToUser(){
var promise = new Promise( (resolve, reject)=> {
this.fetchAllRiders().subscribe( distance => {
this.distances.push( distance );
});
resolve(this.distances);
})
return promise;
}
我做错了什么?
答案 0 :(得分:2)
您正在立即解决Promise
。我认为fetchAllRiders()
也是异步的,因为你订阅它,这意味着立即解决不会给你留下任何东西。
您需要在订阅中resolve()
:
this.findClosestRiderToUser().then( data => {
console.log( data );
});
findClosestRiderToUser() {
return new Promise( (resolve, reject)=> {
this.fetchAllRiders().subscribe(distance => {
this.distances.push(distance);
resolve(this.distances);
});
});
}
但是,如果它只返回一个距离,它将只返回距离。
看起来您正试图将订阅模式包含在Promise模式中,因为它们根本不同,所以它不会真正起作用。
订阅模式通常具有连续的数据馈送。您订阅,这样每次有更新时都会被告知。
一旦完成,Promise模式只会将其值解析一次。
如果你需要收集所有距离,你必须要有一个阈值来知道你何时完成,或者它是否有某种onCompleted()
回调哪个会告诉你它已经完成了。
如果您想在每次物品通过时更新最近的骑手,您只需要在订阅中计算内容。