2012-11-29 4 views
0

콜백을 오브젝트 successerror으로 분할하는 비동기 함수가 있는데이 함수는 하나의 매개 변수 (콜백 외) "pink"을 사용합니다.배열을 기반으로 비동기 함수를 중첩하는 방법은 무엇입니까?

async("pink",{ 
    success:function(){ 

    }, 
    error:function(){ 

    } 
}); 

나는 배열에 취해 async 조치에 대한 true 또는 false 값을 반환이 함수의 복수 버전을 만들고 싶어.

asyncs(["blue","red","green"],function(values){ 
    console.log(values); // [true,true,true]; 
}); 

트릭 각 acync 동작 다음 내에 있어야 함수 (true 또는 false)의 값으로 pushed() 될 필요가 있다고하는 "세계"(범위 이상) values 변수와 반환

이 각각 async() 기능을 내포하고 values 복귀 매우 기초적인 방법 인합니다 (count 배열 length 도달 할 때)가 수동으로 만 3 배열 값 산책로 때문에 끝에 마스터 callback(values), 그것은 제한된 .

var asyncs = function(params,mstrCB){ 
    var length = params.length; 
    var values = []; 
    async(param[0],{ 
     success:function(){ 
      values.push(true); 
      async(param[1],{ 
       success:function(){ 
        values.push(true); 
        async(param[2],{ 
         success:function(){ 
          values.push(true); 
          mstrCB(values); 
         }, 
         error:function(){ 
          values.push(false); 
          mstrCB(values); 
         } 
        }); 
       }, 
       error:function(){ 
        values.push(false); 
        mstrCB(values); 
       } 
      }); 
     }, 
     error:function(){ 
      values.push(false); 
      mstrCB(values); 
     } 
    }); 
}; 
+0

: https://github.com/willconant/flow-js – mkoryak

답변

1

수동으로 중첩하는 대신 카운터를 사용하십시오. 요청을 자신의 기능에 넣고 각각 success에서 카운터를 증가시키고 length보다 작 으면 새로운 요청을하십시오.

i === length 일 경우 mstrCB()으로 전화하십시오. 난 당신이 위대한 작은 lib 디렉토리를 사용하는 것이 좋습니다 당신이 더 자주이 작업을 수행하려고하는 (그리고 당신이) 경우

var asyncs = function(params,mstrCB){ 
    var length = params.length; 
    var values = []; 
    var i = 0; 

    if (length) 
     makeRequest(); 

    function makeRequest() { 
     async(params[i], { 
      success:function(){ 
       values.push(true); 

       // Increment the counter 
       i++; 

       if (i === length) // we're at the end 
        mstrCB(values); 
       else 
        makeRequest(); // there's still more, so make another request 
      }, 
      error:function(){ 
       values.push(false); 
       mstrCB(values); 
      } 
     }); 
    } 
}; 
+0

이것은 내가에 있었다 정확히 내 마음, 나는 그것을 시각화 할 수 없었다. – ThomasReggi

+0

@ThomasReggi : 다행이었습니다. –

관련 문제