Javascript 角度$q.all()的问题
我有一个工厂正在发出'n'个$http请求,为了完成这个请求,我使用$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)
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这里有一些很好的读物:还有这个。第一个链接中的页面将你在这里所做的作为“被遗忘的承诺”。