Javascript 只有在异步调用完成后才能执行某些操作
我试图在同步和异步调用后在图像上创建反弹效果,但不知道如何实现。我现在遇到的问题是,有时我会同时获得反弹效果,然后执行Javascript 只有在异步调用完成后才能执行某些操作,javascript,asynchronous,Javascript,Asynchronous,我试图在同步和异步调用后在图像上创建反弹效果,但不知道如何实现。我现在遇到的问题是,有时我会同时获得反弹效果,然后执行isExecuted,因为异步事件需要一些时间 我的代码应该是这样工作的: 迭代myEnum中的每个对象并执行以下操作 如果myCondition1也相等myCondition2setisExecuted=true 如果上面不是真的,调用一个异步方法来计算一些东西,如果是真的,它将设置isExecuted=true 等待以上所有操作完成,然后如果isExecuted仍然为fal
isExecuted
,因为异步事件需要一些时间
我的代码应该是这样工作的:
迭代myEnum
中的每个对象并执行以下操作
- 如果
也相等myCondition1
setmyCondition2
isExecuted=true
- 如果上面不是真的,调用一个异步方法来计算一些东西,如果是真的,它将设置
isExecuted=true
- 等待以上所有操作完成,然后如果
仍然为false,则反弹图像isExecuted
var isExecuted = false;
myEnum.each()
{
if (myCondition1 == myCondition2) { //Synchronous
isExecuted = true;
return false; //stop the iteration
}
else {
MyAsyncFunction(myCondition2, function(isTrue) { // Asynchronous
if (isTrue) {
isExecuted = true;
return false; //stop the iteration
}
});
}
});
// Execute this ONLY when above code is finished executing
if (isExecuted == false) {
BounceImage();
}
请注意,异步函数并不总是执行,但如果执行的是
isExecuted
,则必须始终执行反弹检查。相反,请使用回调:
function asyncFunction (a, b, c, callback) {
...
callback();
}
asyncFunction(1, 2, 3, function () {
doSomethingOnceDone();
});
这是一种非常普遍的做法。这是大多数异步Chrome API的工作方式,仅举一件事。整个设置不会按照您的意愿工作,因为您无法从异步回调停止迭代。相反,您必须异步处理数组(或myEnum的任何内容),然后再做一些事情。我强烈建议你去了解一下
函数过程(数组、cb){
var i=0;
函数p(v){
返回新承诺((解决、拒绝)=>{
试一试{
//调用回调函数,传入当前值并
//用于控制执行的回调
cb(v,功能下一步(停止,结果){
如果(停止){
//如果stop=true,则中止迭代并解析传入的值
决心(结果);
}else if(i }).then(result=>console.log(result))
在$(“a#“+index+“img”)
中的索引从哪里来?一般的答案是:使用承诺和Promise.all
。回调会有所帮助,但我不知道如何用JavaScript编写它们。还有,myVar
?@FelixKling它来自myEnum.each(函数(索引)
这与问题并不相关…@MadhusoodanP在你不知道如何帮助的情况下为什么要发表评论?