#javascript #asp.net-mvc #asynchronous
#javascript #asp.net-mvc #асинхронный
Вопрос:
Мы начали перемещать наши устаревшие js-скрипты в соответствии с последней спецификацией и изменили несколько методов js на асинхронные. Например
const persistMode = async (serverUrl, id, mode) => {
const data = JSON.stringify({id: id, mode: mode});
const ajaxProperties = {
type: "POST",
url: serverUrl,
data: data,
dataType: "json",
contentType: "application/json"
};
return await $.ajax(ajaxProperties);
};
Теперь у меня есть определенный пакет, и я передал его в файл cshtml следующим образом
@Scripts.Render("~/bundles/fc")
Теперь, когда представление загружено, я получаю следующую ошибку
System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Ajax.Utilities.JSParser.ParseArrowFunction(AstNode parameters)
at Microsoft.Ajax.Utilities.JSParser.ParseLeftHandSideExpression(Boolean isMinus)
at Microsoft.Ajax.Utilities.JSParser.ParseUnaryExpression(Booleanamp;amp; isLeftHandSideExpr, Boolean isMinus)
at Microsoft.Ajax.Utilities.JSParser.ParseExpressionStatement(Boolean fSourceElement)
at Microsoft.Ajax.Utilities.JSParser.ParseStatement(Boolean fSourceElement, Boolean skipImportantComment)
at Microsoft.Ajax.Utilities.JSParser.ParseStatements(Block block)
at Microsoft.Ajax.Utilities.JSParser.InternalParse()
at Microsoft.Ajax.Utilities.Minifier.MinifyJavaScript(String source, CodeSettings codeSettings)
at System.Web.Optimization.JsMinify.Process(BundleContext context, BundleResponse response)
at System.Web.Optimization.Bundle.ApplyTransforms(BundleContext context, String bundleContent, IEnumerable`1 bundleFiles)
at System.Web.Optimization.Bundle.GetBundleResponse(BundleContext context)
at System.Web.Optimization.BundleResolver.GetBundleContents(String virtualPath)
at System.Web.Optimization.AssetManager.DeterminePathsToRender(IEnumerable`1 assets)
at System.Web.Optimization.AssetManager.RenderExplicit(String tagFormat, String[] paths)
at ASP._Page_Views_xxx__xxxxxxxx_cshtml.Execute() in xxxxxxxxxxxxxxxxxxx:line 479
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.StartPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.amp;<amp;>c__DisplayClass3_1.amp;<BeginInvokeActionamp;>b__1(IAsyncResult asyncResult);
Есть идеи, что здесь не так. И объединение работает, если я удаляю async / await из указанного метода.
Ответ №1:
Попробуйте использовать этот алгоритм :
function onSuccess(result) {
....succes code
};
function onError(xhr, exceptio) {
.... error code
};
function getData( serverUrl, id, mode ) {
var data={id: id, mode: mode}
$.ajax({
async: true,
url: serverUrl,
type: "POST",
cache: false,
data: data,
dataType: "json",
contentType: "application/json"
success: function (result) {
onSuccess(result);
return true;
},
error: function (xhr, exception) {
onError(xhr, exception);
return false;
}
});
};