2013-07-25 2 views
0

나는 현재 캐스퍼 모듈을 사용하여 일을 수행하는 캐스퍼 모듈을 만들려고 노력하고, 그에서 변수를 반환 좀 같이 해요 :CasperJS 모듈이 값을 반환하기 전에 실행을 마칠 때까지 기다리시겠습니까?

var data = []; 

exports.parsePage = function(argUrl) { 

    url = baseUrl = argUrl; 

    if (!url) { 
     casper.warn('No url passed, aborting.').exit(); 
    } 

    casper.start('https://js-uri.googlecode.com/svn/trunk/lib/URI.js', function() { 
     var scriptCode = this.getPageContent() + '; return URI;'; 
     window.URI = new Function(scriptCode)(); 
     if (typeof window.URI === "function") { 
      this.echo('URI.js loaded'); 
     } else { 
      this.warn('Could not setup URI.js').exit(); 
     } 
     //process is a function that processes the page 
    }).run(process); 

    return data; 
} 

내 테스트는 다음과 같습니다

var scanner = require('./pageParser'); 

console.log(JSON.stringify(scanner.parsePage('http://url.com'))); 

casper가 parsePage 함수에서 데이터를 반환하기 전에 실행을 마칠 때까지 기다릴 수 있습니까?

+0

가 왜이 같은 utilitiy를 사용하지 않는 [밑줄-JS]를 (http://underscorejs.org/#debounce)와'_.debounce()'? – mate64

+0

내 상황에 도움이되지 않는다고 생각합니다. 나는 JS를 웹 페이지에 삽입하려고하지 않는다. 웹 페이지가 아닌 Casper 인스턴스의 컨텍스트에서이를 수행하려고한다. – Seiyria

답변

1

phantomjs에서 가져온 this example과 같은 대기 기능을 사용할 수 있지만 javascript : async 및 callbacks의 기본 개념이 누락되었습니다.

그래서, 가능한 솔루션은

모듈 pageParser.js ...입니다 :

function process(callback) { 
    //do something here 
    callback(data); 
} 

exports.parsePage = function(argUrl, callback) { 
    ... 
    casper.start('https://js-uri.googlecode.com/svn/trunk/lib/URI.js', function() { 
     ... 
    }).run(process(callback)); 
} 

주요 스크립트

var scanner = require('./pageParser'); 

scanner.parsePage('http://url.com', function(data) { 
console.log(JSON.stringify(data)); 
}); 
+0

파일간에 비동기를 만들 수있는 방법을 생각할 수 없지만 좋은 방법이 있습니다. 감사! – Seiyria

관련 문제