Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度$q.all()的问题_Javascript_Angularjs - Fatal编程技术网

Javascript 角度$q.all()的问题

Javascript 角度$q.all()的问题,javascript,angularjs,Javascript,Angularjs,我有一个工厂正在发出'n'个$http请求,为了完成这个请求,我使用$q.all(),所以让我向您展示我的工厂代码 app.factory('loadBooks',['$http','$q',function($http,$q){ var承诺=[]; 返回{ getBooks:函数(类别,编号){ 对于(var i=1;i您已经成为一个名为“关闭循环变量”的潜在错误的牺牲品。延迟的变量的值在循环的每次迭代中都会发生变化,因此当它最终执行时: deferred.resolve(response)

我有一个工厂正在发出'n'个$http请求,为了完成这个请求,我使用$q.all(),所以让我向您展示我的工厂代码

app.factory('loadBooks',['$http','$q',function($http,$q){
var承诺=[];
返回{
getBooks:函数(类别,编号){

对于(var i=1;i您已经成为一个名为“关闭循环变量”的潜在错误的牺牲品。
延迟的
变量的值在循环的每次迭代中都会发生变化,因此当它最终执行时:

deferred.resolve(response);
deferred
是指
deferred
变量采用的最后一个值

最重要的是,您正在使用显式Promise Creation反模式,这是一种反模式,会导致Promise代码变得不必要的复杂和容易出错

通过使用承诺的方式解决这两个问题:

app.factory('loadBooks',['$http','$q',function($http,$q){
返回{
getBooks:函数(类别,编号){
var承诺=[];

对于(var i=1;i您已经成为一个名为“关闭循环变量”的隐匿错误的牺牲品。循环的每次迭代中
defered
变量的值都会发生变化,因此当最终执行时:

deferred.resolve(response);
deferred
是指
deferred
变量采用的最后一个值

最重要的是,您正在使用显式Promise Creation反模式,这是一种反模式,会导致Promise代码变得不必要的复杂和容易出错

通过使用承诺的方式解决这两个问题:

app.factory('loadBooks',['$http','$q',function($http,$q){
返回{
getBooks:函数(类别,编号){
var承诺=[];

对于(var i=1;i)除了答案,它原本应该是
promises.push(deferred.promise)
promises.push(deferred)
promises.push(deferred)
promises.push(deferred)
根本不应该起作用。哈哈,谢谢你,你救了我!我想我必须了解更多关于$q的信息。@iAmRoot这里有一些很好的阅读材料:还有这个。第一个链接中的页面将你在这里做的事称为“忘记的承诺”.哈哈,谢谢你,你救了我!我想我得了解更多关于$q的信息。@iAmRoot这里有一些很好的读物:还有这个。第一个链接中的页面将你在这里所做的作为“被遗忘的承诺”。