Javascript 承诺值长度返回0

Javascript 承诺值长度返回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

当I
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()
回调来告诉您完成了

如果你想在每次项目通过时更新最接近的骑手,你只需在订阅中计算即可