2013-06-30 4 views
1

노드 - 웹킷 앱 내에서 nodejs 비동기 모듈 (waterfall 메소드)을 사용하려고하는데 제대로 실행되지 않습니다. 그것은 체인의 마지막 항목으로 곧장 뛰어 오르고 다른 모든 것은 무시합니다. 내 코드는 nodejs에서 완벽하게 작동합니다. 내 코드가 될 수 있다고 생각하지만, 심지어 async 워드 프로세서에서 다음 예제는 동일 않습니다.노드 - 웹킷 내에서의 NodeJs Async.waterfall

async.waterfall([ 
    function(callback){ 
     callback(null, 'one', 'two'); 
    }, 
    function(arg1, arg2, callback){ 
     callback(null, 'three'); 
    }, 
    function(arg1, callback){ 
     // arg1 now equals 'three' 
     callback(null, 'done'); 
    } 
], function (err, result) { 
    console.log(result) 
    // result now equals 'done' 
}); 

async.series 방법을 사용하는 다음 예는 작업을 수행하지만 :

async.series([ 
function(callback){ 
    // do some stuff ... 
    callback(null, 'one'); 
}, 
function(callback){ 
    // do some more stuff ... 
    callback(null, 'two'); 
} 
], 
// optional callback 
function(err, results){ 
// results is now equal to ['one', 'two'] 
}); 
+0

node-webkit과 Node.js에서 코드를 실행했지만 결과가 'undefined'와 같습니다. –

+0

흠 - Node.js에서 실행하면 이상합니다. Node-Webkit에서 '완료'를 반환합니다. 'undefined'를 반환합니다! – user1513388

답변

1

이 비동기 모듈에 버그이며, 이것에 대해 Github에서에 열려 문제가있다 (issue #302는.) 문제는 노드가 새로운 환경 (vm 모듈 사용)을 만들 때 비동기 사용이 내부적으로 사용하는 배열 검사가 유효하지 않다는 것입니다.

async.waterfall = function (tasks, callback) { 
    callback = callback || function() {}; 
    if (tasks.constructor !== Array) { 

에 :

나는에서 lib/async.js에 라인 (472)에 배열 검사를 변경하여이 고정

이 문제를 해결 열려 몇 풀 요청, 그래서 희망이있다
async.waterfall = function (tasks, callback) { 
    callback = callback || function() {}; 
    if (!Array.isArray(tasks)) { 

곧 수정 될 것입니다.

+0

감사합니다. - 결국 비동기 라이브러리를 사용하는 모든 코드를 별도의 파일에 저장 한 다음 '필요'했습니다. 이것은 트릭을하는 것처럼 보였지만, 나는 당신의 제안과 새로운 nwglobal 모듈을 시도 할 것입니다 - https://github.com/Mithgol/nwglobal – user1513388