我不断收到以下错误:类型错误:无法读取 checkInventoryData 中未定义的属性“then”。我该如何解决?
function checkInventoryData(url, size, code) {
var inventoryData = { };
return $http.get(url).then(function(response) {
var html = response.data;
// getting error here: TypeError: Cannot read property 'then' of undefined
getInventoryProductQty(html, size).then(function(result) {
result = inventoryData.productQty;
});
return inventoryData;
});
}
function getInventoryProductQty(html, size) {
var inventoryAvailable;
var deferred = $q.defer();
try {
var inventoryAvailablity = getInventoryAvailability(html, size);
inventoryAvailablity.then(function(result) {
if(result) {
inventoryAvailable = result.getAttribute('data-available');
deferred.resolve(inventoryAvailable);
return deferred.promise;
}
});
}
catch(err) {
inventoryAvailable = null;
return inventoryAvailable;
}
}
最佳答案
您需要从 getInventoryProductQty
返回一个 Promise,现在您在错误情况下返回 null,但在正常情况下则不会返回任何内容(这两个都不是 Promise。
编辑 - 在OP代码中显示这个答案,并对结构进行评论。
function checkInventoryData(url, size, code) {
var inventoryData = { };
return $http.get(url).then(function(response) {
var html = response.data;
// getting error here: TypeError: Cannot read property 'then' of undefined
getInventoryProductQty(html, size).then(function(result) {
result = inventoryData.productQty; // this has not been set at this point, you need to set it somehow (@trincot's comment)
});
return inventoryData;
});
}
function getInventoryProductQty(html, size) {
var inventoryAvailable;
var deferred = $q.defer();
try {
var inventoryAvailablity = getInventoryAvailability(html, size);
return inventoryAvailablity.then(function(result) { // need to add this return to return the result of the then func
if(result) {
inventoryAvailable = result.getAttribute('data-available');
deferred.resolve(inventoryAvailable);
return deferred.promise;
}
});
}
catch(err) {
//inventoryAvailable = null;
//return inventoryAvailable;
return $q.resolve(null); // need something like this to return a promise from the failure case
}
}
您还应该让 getInventoryAvailability
返回一个 Promise,以便可以使用 .catch
而不是 try...catch
来调用它,但这超出了本文的范围
关于javascript - 返回嵌套 Promise 时无法读取未定义的属性 'then',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473635/