首页 > 解决方案 > Await 在方法 javascript 中不起作用

问题描述

我有一个返回一些数据的 ajax 调用。代码是:

function ProductCodeLookUp() {
        return $.ajax({
            url: "/ProductInventory/GetProductCodeHirerchy",
            type: "get", //send it through get method
            async: false,
            data: {
                productCode: $('#ProductCodeText_Id').val()
            },
            success: function (response) {
                debugger;
                if (response != null && (response.tissueClassificationType != null || response.tissueClassificationType != null)) {
                    $('#productCodeTable_id').show();
                    $('#ProductCodeNotExistsWarning_id').hide();

                    //addOptionsToSelect(response, 'size_id', $('input[id=size_id]').val());
                    $('#ProductCodeTextClassification_Id').text(response.tissueClassificationType);
                    $('#ProductCodeTextTissueType_Id').text(response.tissueType);
                    $('#ProductCodeTextProduct_Id').text(response.tissueDefinition);
                    $('#ProductCodeTextSize_Id').text(response.tissueDefinitionSize);
                }
                else {
                    $('#ProductCodeNotExistsWarning_id').show();
                    $('#productCodeTable_id').hide();
                }
            },
            error: function (xhr) {
                //Do Something to handle error
            }
        });
    }

我必须根据这个 Ajax 调用返回的数据做出一些决定。我调用ProductCodeLookUp()方法的方法是:

async function checkRequiredFields() {
var isValid = false;
if (checkRequiredFieldsSubMethod() == true) {
            if (AddProductInBulk() == true) {
                if (QualityChecksValidation() == true) {
                    debugger;
                    var res = await ProductCodeLookUp();
                    if (res.tissueDefinitionSize != null)
                        isValid = true;
                    else
                        isValid = false;
                  }
                }
         }
        debugger;
        return isValid;
    }

问题是它不等待该ProductCodeLookUp()方法。我必须等待这个方法的结果,并根据结果来决定是返回真还是假。但我无法做到这一点。可能是什么问题。

标签: javascriptajaxpromiseasync-await

解决方案


将 ajax 调用包装在一个 Promise 中,该 Promise 解决成功并拒绝错误。

function ProductCodeLookUp() {
  return new Promise((resolve, reject) => $.ajax({
    // ...
    success: function (response) {
      // ...
      resolve();
    },
    error: function (response, status, err) {
       // ...
       reject(err);
    }
  }));
}   

另外,设置async为真


推荐阅读