承诺值长度返回0

时间:2017-12-12 19:47:39

标签: javascript promise

当我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;
}

我做错了什么?

1 个答案:

答案 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()回调哪个会告诉你它已经完成了。

如果您想在每次物品通过时更新最近的骑手,您只需要在订阅中计算内容。