【发布时间】:2019-12-02 18:49:22
【问题描述】:
我有这个来自 Angular 的脚本。问题有时是 p.products 显示未定义。有时工作有时不是我已将承诺放在 settimeout 函数中但未解决。 Packages Products Called 1 每次都调用成功,但在 promise 运行后有时会显示 p.products 未定义。
.directive('packagesBrowser', function() {
return {
scope: {
select: '='
},
templateUrl: 'packages-browser.html',
controller: [
'$scope', 'Packages', 'Store', 'Inventory', function($scope, Packages, Store, Inventory) {
$scope.packageOptions = {};
$scope.packages = Packages;
console.log('Packages Products Called 1');
Packages.$promise.then(function() {
return Packages.forEach(function(p) {
if (!p.products) {
return;
}
$scope.packageOptions[p.id] = p.products.map(function(product) {
return {
product_id: product.product.id,
quantity: product.quantity
};
});
return console.log('Packages Products Called 2');
});
});
return Store.$promise.then(function() {
return $scope.available = function(id) {
return (Inventory.list[id] && Inventory.list[id].available) || 0;
};
});
}
]
};
})
【问题讨论】:
-
包(“p”)对象应该包含什么?当 p.products 为假时,也许 console.log 将它放在 if/return 之上?
-
在不知道
Packages做什么的情况下说不出来。显然,无论Packages包含什么,其中至少有一个没有products属性。 -
array.forEach方法返回undefined。console.log方法返回undefined。 AngularJS 控制器忽略返回值。通常通过返回一个值来解决 promise.then方法。在这种情况下,值是一个函数。很难理解这段代码的意图。至于“承诺后数组返回未定义”,不清楚你在问什么。
标签: javascript angularjs promise