我已经在我目前的工作上做了一段时间的项目,他们正在使用Angulajs作为前端。最近我正在尝试实施ES6标准。该项目使用Factory从后端包装API服务,如下所示:
'use strict';
angular.module('products').factory('Products', ['$resource',
($resource)=> {
return $resource('api/products/:productId', {
productId: '@id'
},{
update: {
method: 'PUT'
},
getProductsByType : {
url: 'api/:schoolIdProduct/products/:Type',
params: {
schoolIdProduct: ':schoolIdProduct',
Type: ':Type'
},
isArray: true
}
});
}
]);
现在,当我们从控制器调用Factory时,我只需添加工厂然后调用这样的函数:
$rootScope.supplies = Products.getProducts({
schoolIdProduct: schoolId,
Type: 'Supplies'
});
因此,当我尝试使用箭头函数和then()
等待响应时,浏览器控制台告诉我这不是一个函数。如何更改我的代码以使用ES6标准并获得类似的内容?
Products.getProducts({
schoolIdProduct: schoolId,
Type: 'Supplies'
}).then( (response) =>{
$rootScope.supplies = response;
});
答案 0 :(得分:0)
所以你没有从响应中得到承诺,所以需要用$ q或bluebird来宣传你的回复。
提到了两种解决方案,并且您正在使用ngResource来获得共鸣。
使用$ q:https://docs.angularjs.org/api/ng/service/ $ q 的角度文档链接
你也可以使用bluebird库并使用promise library转换响应
let promise = new Promise(function (resolve, reject) {
try {
resolve(Products.getProducts({
schoolIdProduct: schoolId,
Type: 'Supplies'
}))
} catch (error) {
reject( error)
}
})
return promise