Javascript 承诺值长度返回0
当IJavascript 承诺值长度返回0,javascript,promise,Javascript,Promise,当Iconsole.logpromise的值时,我得到该值,但长度返回0。如果我提醒了承诺返回的值,但它是空的 this.findClosestRiderToUser().then( data => { console.log( data ); //alert ( data ) not working , returns empty //console.log( data.length ) returns 0 }) //here is the promise c
console.log
promise的值时,我得到该值,但长度返回0。如果我提醒了承诺返回的值,但它是空的
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;
}
我做错什么了吗?你正在马上解决你的
承诺。我假设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);
});
});
}
然而,如果它只返回一个距离,它将只返回距离
看起来您正试图将订阅模式包装为承诺模式,但这不会真正起作用,因为它们根本不同
订阅模式通常具有连续的数据馈送。您可以订阅,以便在每次更新时都能得到通知
承诺模式在完成时只解析其值一次
如果需要收集所有距离,则必须有一些阈值才能知道何时完成,或者是否有某种类型的onCompleted()
回调来告诉您完成了
如果您想在每次收到物品时更新最接近的骑手,您只需在订阅中计算即可。您正在立即解决您的承诺。我假设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);
});
});
}
然而,如果它只返回一个距离,它将只返回距离
看起来您正试图将订阅模式包装为承诺模式,但这不会真正起作用,因为它们根本不同
订阅模式通常具有连续的数据馈送。您可以订阅,以便在每次更新时都能得到通知
承诺模式在完成时只解析其值一次
如果需要收集所有距离,则必须有一些阈值才能知道何时完成,或者是否有某种类型的onCompleted()
回调来告诉您完成了
如果你想在每次项目通过时更新最接近的骑手,你只需在订阅中计算即可