Async/Await不适用于alert()-javascript
我希望先执行带有wait关键字的两个函数,然后执行alert()和location.reloadAsync/Await不适用于alert()-javascript,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,我希望先执行带有wait关键字的两个函数,然后执行alert()和location.reload async function CompleteUpload(){ await LoadValues(); await UploaderMethod(); alert("Product Added Successfully!"); location.reload();
async function CompleteUpload(){
await LoadValues();
await UploaderMethod();
alert("Product Added Successfully!");
location.reload();
}
警报在2个等待函数调用之前弹出,并且在执行这些方法之前重新加载页面。
如果我不在最后放入alert()并重新加载,upload CompleteUpload()工作得非常好
更新了**(在有人回答回复承诺后)
在上传任务结束时,我写了以下内容:
return new Promise(function(resolve, reject) {
resolve("yeah");
}
将完整上载更改为:
function CompleteUpload(){
LoadValues();
UploaderMethod().then(Reeeload());
}
function Reeeload(){
alert("Product Added Successfully!");
location.reload();
}
是不是特别的
alert()
不适用于async/await?如果将alert()
和location.reload()
行替换为类似于console.log的内容,以查看是否也首先执行该命令,该怎么办
可能是您的LoadValues()
和UploaderMethod()
导致了问题。这与警报完全无关
您的UploaderMethod
被定义为async
,因此它总是返回一个承诺,但该承诺在上传任务完成之前就解决了(因此它会立即继续执行下一个语句(在reload
之后是reload
)
你应该:
- 从中删除
async
关键字(因为它没有等待任何承诺)
- 返回使用
promise
构造函数创建的承诺
- 在
状态\u changed
事件处理程序中解析该承诺(当所有内容都已解析时)
看
旁白:LoadValues
除了完全同步的DOM访问之外,什么都不做。它不应标记为async
,也不应等待结果。等待在顶级代码中不起作用
所以函数()的整数({})使用这个()=>{}就可以了
我从这个网站截图。我也有同样的问题()我想问题是,UploaderMethod
返回得太早了。您可能希望返回一个承诺,并在上载完成时调用resolve方法。从我看到的部分来看,我猜它在进行上传调用后返回,而不是等待上传完成。在我单击alert方法上的ok之前,上传不会开始,尽管它已重新加载,因为我已将其放在那里。在这两种方法之前,都会发生alert和location重载,当我删除alert和reload时,如果它们运行得很好,它们怎么会导致问题呢?alert和location reload在异步函数中应该可以正常工作,所以我怀疑问题出在其他两个函数上-可能是UploaderMethod()
警报
中断页面上的代码执行,重新加载也会取消代码执行。因此,如果您的上载方法尚未完成,它将被取消。要等待方法完成,请看Quentin的回答是的,我同意,只是意味着它们都应该在其他两个函数之后执行。昆汀的回答应该能满足你的要求。我更新了我的问题,要么我的承诺是错误的,要么它不起作用。完全错误。要么承诺没有从UploaderMethod
函数返回,要么resolve
不在状态\u changed
事件处理程序中。再看看我提到的另一个问题。看看这个,这是我的完整上传方法。我在完成data.set()方法后写下了承诺,它在uploadtask函数中。你的承诺与状态改变事件无关。请看我引用的问题作为示例。好的,我已经尽了最大的努力来理解promise是如何工作的,但是现在我有两个问题,(1)与之前一样,alert仍然首先触发(2)promise在页面加载后立即执行。
function CompleteUpload(){
LoadValues();
UploaderMethod().then(Reeeload());
}
function Reeeload(){
alert("Product Added Successfully!");
location.reload();
}