に関連フィドルを.thenに渡すことです。いくつかのシナリオをテストするために、私はにメッセージをプッシュする範囲で配列を作成しました:
function returnAPromise(valToReturn){
return $q(function(resolve, reject){
$timeout(function(){
resolve(valToReturn);
}, 500);
});
}
は、私は、持っている:私はそう$のQ関数を返す関数を設定している
$scope.messages = [];
このように見える結果に.then()
コール:私は約束を配列にして解決されたことを値をプッシュしたいので
returnAPromise('third').then($scope.messages.push);
は、私はちょうど会ったプッシュに渡すことができます考え出し
VM289 angular.js:12520 TypeError: Array.prototype.push called on null or undefined
at processQueue (VM289 angular.js:14792)
at VM289 angular.js:14808
at Scope.$eval (VM289 angular.js:16052)
at Scope.$digest (VM289 angular.js:15870)
at Scope.$apply (VM289 angular.js:16160)
at VM289 angular.js:17927
at completeOutstandingRequest (VM289 angular.js:5552)
at VM289 angular.js:5829
私は機能にプッシュを囲む場合は、それが正常に動作します:
returnAPromise('third').then(function(message){
$scope.messages.push(message)
});
が、これは閉鎖問題であり、私は次のエラーを取得する、というメッセージ配列のHODが、ときに私がやります理解していないのですか?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind実施例のセクションには、問題を説明し、なぜ.bind()、それを解決します。残念ながら、これには、「新しいJavaScriptプログラマーにとってよくある間違い」という行が含まれています。 = [私は降格されました。 – sonicblis