javascript - inventoryData 返回未定义,因为 $http.get 是异步的,如何重构代码?

标签 javascript angularjs

我正在进行以下 http get 调用来获取 html 页面源代码,然后对其进行解析。

由于某种原因,它一直返回 undefined。

如何修复它?

Update: It seems that $http.get() is asynchronous, so how would I go about returning a value from it?

function checkInventory() {
  var newReqObj = DataService.getFormData();
  var store = newReqObj.store;
  var code = newReqObj.code;
  var size = newReqObj.size;

  if(store === 'nike') {
        var inventoryData = checkNike(store, code, size);
        $log.debug(inventoryData);
        return inventoryData;
    }
}

function checkNike(store, code, size) {
    var inventoryData = {
        'qtyAvailable': 0,
        'maxOrder': 0,
        'size': 0,
        'name': '',
        'price': '',
        'url': '',
        'code': code
    };

    var url = 'http://www.nike.co.uk/search?q=' + code;
    checkNikeUrl(url, size, inventoryData);
}

function checkNikeUrl(url, size, inventoryData) {
    $http.get(url).then(function(response) {
        var html = response.data;

        inventoryData.qtyAvailable = utility.getProductQty(html, size);
        inventoryData.maxOrder = utility.getProductMaxOrder(html, size);
        inventoryData.size = size;
        inventoryData.name = utility.getProductName(html);
        inventoryData.price = utility.getProductPrice(html);
        inventoryData.url = url;

        return inventoryData;
    })
};

最佳答案

您必须在代码中添加 2 个返回值。

第一:

 $http.get(url).then(function(response) {

应该是

return $http.get(url).then(function(response) {

第二个

  checkNikeUrl(url, size, inventoryData);

应该是

return checkNikeUrl(url, size, inventoryData);

编辑

我认为

var inventoryData = checkNike(store, code, size);

应该只是

return checkNike(store, code, size);

关于javascript - inventoryData 返回未定义,因为 $http.get 是异步的,如何重构代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42355403/

相关文章:

javascript - jQuery 验证 : abstracting rules

javascript - 使用 Channel API 接收来自任务队列中任务的消息

javascript - Bootstrap - Modal 在隐藏时保持 "display: block"

javascript - Node.JS 异步调用mySql

Angularjs 复选框确认

javascript - 如何使用 ng-if 显示或隐藏输入字段?

javascript - 每次点击重复 div Angular

javascript - Angular隐藏上传并显示新上传的图片

javascript - angularjs 编写 ColdFusion 服务发送 json 数据和捕获的正确方法

javascript - react-slick 旋转木马通过滚动事件循环播放幻灯片 - react js, javascript