【发布时间】:2021-05-03 03:26:26
【问题描述】:
我有一个返回一些数据的 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() 方法。我必须等待这个方法的结果,并根据结果来决定是返回真还是假。但我无法做到这一点。可能是什么问题。
【问题讨论】:
-
ProductCodeLookUp()是否返回Promise以供await处理? -
是的,它确实返回了一个承诺。 @TimothyAlexisVass
-
当你要等待“承诺”解决时,为什么要
async: false? -
$.ajax不返回承诺,而是返回它创建的 XMLHttpRequest 对象。您可以尝试自己返回承诺并在success处理程序中解决它。 -
@WiktorZychla
$.ajax()返回一个$.Deferred对象,这是一个类似Promise的对象,也适用于await-> jsfiddle.net/fL5okpqm
标签: javascript ajax promise async-await