Javascript 从jQuery ajax函数的承诺语法转换为try/catch/finally和async/await失败?
下面的jQuery代码运行良好Javascript 从jQuery ajax函数的承诺语法转换为try/catch/finally和async/await失败?,javascript,jquery,promise,async-await,es6-promise,Javascript,Jquery,Promise,Async Await,Es6 Promise,下面的jQuery代码运行良好 // Make request. $.ajax(settings) .done(function(result) { requestDidSucced(result); }) .fail(function(result) { requestDidFail(result); }) .always(function(result) { requestDidFinish(result); }); 但是,将此代码转换为使用try/catch/fi
// Make request.
$.ajax(settings)
.done(function(result) {
requestDidSucced(result);
})
.fail(function(result) {
requestDidFail(result);
})
.always(function(result) {
requestDidFinish(result);
});
但是,将此代码转换为使用try/catch/finally
和async/await
失败,因为finally
块无法访问$.ajax()的结果
特别是,如果我们在try
块之外定义result
,是否可以安全地假设result
与finally
块一起获得值,就像它与always
块一样
// Make request.
try {
let result = await $.ajax(settings);
requestDidSucceed(resultBox, result);
} catch (result) {
requestDidFail(result);
} finally {
requestDidFinish(result); // This fails because `request` is not available.
}
finally
块是否可以访问AJAX查询的结果?在try
块之外声明结果
:
// Make request.
let result;
try {
result = await $.ajax(settings);
requestDidSucceed(resultBox, result);
} catch (error) {
requestDidFail(error);
} finally {
requestDidFinish(result);
}
然而,你应该注意如何安排这件事。例如,如果requestdidcessfuel
抛出错误,也将调用catch
子句。您不能在try块之外声明结果并用wait分配它吗?@Woody如果$中抛出错误,result
会发生什么情况。ajax
?requestDidFinish
是否保证为result
获取值?如果出现错误,则不会定义结果。@Woody感谢您的帮助。感谢您的快速回复!你说的小心是什么意思?requestdidfish
不能保证最后完成吗?如果$,那么result
会发生什么情况。ajax
抛出错误?requestdidfish
是否保证为result
获取一个值?“requestdidfish是否保证最后完成?”是的,但正如我所说,如果$.ajax
或requestDidFail
失败,将调用requestDidFail
。“如果$.ajax抛出错误,结果又会怎样?requestDidFinish是否保证为结果获取一个值?”result
将是undefined
。如果$.ajax
抛出,您希望传递什么?感谢您的快速响应!我们的目标是尽可能地复制。始终
功能,因为我们希望摆脱旧的promise语法。