Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从jQuery ajax函数的承诺语法转换为try/catch/finally和async/await失败?_Javascript_Jquery_Promise_Async Await_Es6 Promise - Fatal编程技术网

Javascript 从jQuery ajax函数的承诺语法转换为try/catch/finally和async/await失败?

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

下面的jQuery代码运行良好

// 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语法。