如何将javascript ajax调用函数转换为async/await?
假设我有以下函数如何将javascript ajax调用函数转换为async/await?,javascript,Javascript,假设我有以下函数getData getData = (param) => { // jquery $.ajax(...).done(..) } 如何将getData转换为阻塞函数,以便refreshPage仅在getData中的ajax完成后才被调用 data = getData(..) refreshPage() 请注意:我不想在getData getData = (param) => { // jquery $.ajax(...).done(.
getData
getData = (param) => {
// jquery
$.ajax(...).done(..)
}
如何将getData
转换为阻塞函数,以便refreshPage
仅在getData
中的ajax完成后才被调用
data = getData(..)
refreshPage()
请注意:我不想在getData
getData = (param) => {
// jquery
$.ajax(...).done(..)
}
好的。。。以下是我尝试过并似乎有效的方法:
getData = (param) => {
// jquery
return $.ajax(...).done(..)
}
getData.then(refreshPage())
您应该从get data方法返回一个承诺
getData = (param) => {
return new Promise(function(resolve, reject) {
}
}
然后,当事情在ajax中完成时
在那里调用
解析(数据)
您可以尝试以下操作:
getData = (param) => $.ajax(...).done(..)
getData().done(() => refreshPage())
// or
getData().done(refreshPage)
function getData (param)
{
...........
return new Promise((resolve, reject) =>{
jQuery.ajax({...});
});
}
...........
getData(param).then(()=>refreshPage());
getData
不能是阻塞函数,除非使AJAX同步(这是一个非常糟糕的主意)<如果包含函数是async
(通过使getData
返回承诺),则code>await getData(…)可以被设置为准阻塞。这就是你的意思吗?只要把它包装成一个Promise
,当你得到数据时就解决了?@jhpratt把它包装成Promise没有任何意义,$。ajax
已经返回了一个非常好的结果(假设$
是jQuery)。而且没有提到jQuery,我也没有这样假设。从承诺
到异步
/等待
的转换本身肯定有一百万次重复。对不起,忘了提到它是jquery请阅读评论。该方法已经返回了一个承诺。如果您已清除该承诺,请告诉我,或者我发布了正确的代码。这与我尝试的方法非常接近,我使用了getData()。然后(…)
,我无法验证是否使用wait getData()
,因为webpack会向我抛出错误。此答案和@Zlv Ben or的组合正在工作。