Javascript 只有在异步调用完成后才能执行某些操作

Javascript 只有在异步调用完成后才能执行某些操作,javascript,asynchronous,Javascript,Asynchronous,我试图在同步和异步调用后在图像上创建反弹效果,但不知道如何实现。我现在遇到的问题是,有时我会同时获得反弹效果,然后执行isExecuted,因为异步事件需要一些时间 我的代码应该是这样工作的: 迭代myEnum中的每个对象并执行以下操作 如果myCondition1也相等myCondition2setisExecuted=true 如果上面不是真的,调用一个异步方法来计算一些东西,如果是真的,它将设置isExecuted=true 等待以上所有操作完成,然后如果isExecuted仍然为fal

我试图在同步和异步调用后在图像上创建反弹效果,但不知道如何实现。我现在遇到的问题是,有时我会同时获得反弹效果,然后执行
isExecuted
,因为异步事件需要一些时间

我的代码应该是这样工作的:

迭代
myEnum
中的每个对象并执行以下操作

  • 如果
    myCondition1
    也相等
    myCondition2
    set
    isExecuted=true
  • 如果上面不是真的,调用一个异步方法来计算一些东西,如果是真的,它将设置
    isExecuted=true
  • 等待以上所有操作完成,然后如果
    isExecuted
    仍然为false,则反弹图像
代码如下:

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在你不知道如何帮助的情况下为什么要发表评论?