2015-03-30 77 views
0

之前,我有以下的(增加承諾的數組):Angularjs q.all射擊承諾斷定

function processInformation() { 
    var promisesArray = []; 
    for(var i =0; i<a.length; i++) { 
     var promise = this.getValue().then((response) => { 
      this.processValue(response).then(()=> { 
        // it gets here 
      }); 
     }); 
     promises.push(promise). 
    } 

return $q.all(promises); 
} 

然後我打這個電話就像這樣:

getInformation().then((response) =>{ 
     // wait for the promises to be resolved 
     this.processInformation().then((r) => { 
      // never gets here 
      }); 
    }).finally(()=> { 
     //gets here 
}); 

這不是工作如預期的那樣,因爲它確實可以調用finally,並且它永遠不會進入processInformation。我也嘗試使用angular.forEach而不是for循環(在其他文章中建議),但它仍然無法正常工作。它確實進入processValue()的內部。什麼是另一種方法來解決這個問題?

+2

您的文章是矛盾的。你說它永遠不會進入'processInformation'內部,並且它進入'processValue'內部,但是你發佈的第一個函數是processInformation和processValue,這就是_inside_。你可以發佈一個不會自相矛盾的實例嗎?此外,我們不知道「this」,「a」或其他各種各樣的東西是什麼。這裏有很多缺少的信息。最後,看起來你可能在調用'processInformation'時(假設)使用了錯誤的'this'。有沒有你沒有告訴我們的控制檯錯誤? – JLRishe 2015-03-30 20:27:59

回答

1

您正在創建的承諾對象不會返回承諾對象,您也應該從內部承諾返回響應來解決它。

代碼

function processInformation() { 
    var promisesArray = []; 
    for(var i =0; i<a.length; i++) { 
     var promise = this.getValue().then((response) => { 
      return this.processValue(response).then((data)=> { 
        // it gets here 
        return data; 
      }); 
     }); 
     promises.push(promise). 
    } 

return $q.all(promises); 
}