2016-07-07 4 views
0

시간이 걸리는 함수에 각 항목을 전달하고 싶습니다. 하지만 JS 함수가 비동기식 인 것으로 보입니다. 함수를 순차적으로 호출하려면 어떻게해야합니까? (이전에 완료 한 후 다음 항목을 기능에 전달하십시오.)for 루프에서 JavaScript 함수를 순차적으로 호출하는 방법은 무엇입니까?

function main() { 
    for (var i = 0; i < n ; i++) { 
     doSomething(myArray[i]); 
    } 
} 

function doSomething(item) { 
    // do something take time 
} 

제 해결책은 함수를 재귀 적으로 호출합니다. 하지만이 문제를 해결할 다른 방법이 있는지 알고 싶습니다. 감사. 이전 완료 후 작동하려면 다음 항목을 전달하려면

function main() { 
    doSomething(myArray, 0); 
} 

function doSomething(item, i) { 
    // do something take time 
    doSomething(myArray, i + 1); 
} 
+0

지금까지 내가 아는 한 for-cycles와 javascript에서의 함수 호출은 동기식이므로 함수가 비동기가되도록해야합니다. 어쩌면 그것은 함수 자체 내부에있을 수 있습니다. –

+0

죄송합니다. 언급하지 않으려면 코드가 node.js 서버에서 실행되고 있습니다. 그렇기 때문에 기능이 비동기입니까? – Aaron

+1

'myArray.forEach (doSomething)'이 떠오른다. – Malk

답변

0

, 당신은 단지 당신이 순서에 의해 호출하는 기능을 할 수있는이

var Q = require('q'); 
var promise; 
main(); 
function main() { 
    promise = doSomethingPromise(0) 
    for (var i = 1; i < 10 ; i++) { 
     (function (i) { 
      promise = promise.then(function (res) { 
       return doSomethingPromise(res + ' ' + i) 
      }); 
     })(i) 

    } 
} 

function doSomethingPromise (item) { 
    var d = Q.defer(); 
     d.resolve(doSomething(item)); 
    return d.promise; 
} 

function doSomething(item) { 
    // do something take time 
    console.log('doSomething', item); 
    return item; 
} 

같은 약속을 사용하려고 할 수 있습니다.

+0

안녕 chenkehxx, 나는 당신의 대답을 시도했습니다. 그러나 [item.length-1] 항목에 대한 [1] 항목은 Q.defer() 줄에 고정되어 있습니다. – Aaron

+0

모든 코드를 볼 수 있습니까?, 내 코드도 실행하지 않습니다. 단지 의사 코드 일뿐입니다. – chenkehxx

+0

HI chenkenhxx, 내 코드는 여기에 쓴 것과 같습니다. – Aaron

관련 문제