이 deasync를 사용하는 더 나은 방법입니다.
var request = require("request")
var deasync = require("deasync")
var getHtml = deasync(function (url, cb) {
var userAgent = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"}
request({
url: url,
headers: userAgent
},
function (err, resp, body) {
if (err) { cb(err, null) }
cb(null, body)
})
})
var title = /<title>(.*?)<\/title>/
var myTitle = getHtml("http://www.yahoo.com").match(title)[1]
console.log(myTitle)
이 documentation of deasync를 참조하십시오, 당신은 당신이 cb
이 (err, data)
으로 돌아올해야 기능를 만들기 위해
desync(function (n params, cb) {})
를 사용할 수 있습니다. 그러므로 fs.readFile()
같은 기능은 deasync
기능으로 쉽게 감쌀 수 있습니다. 그러나 request
과 같은 함수는 cb(err, data)
으로 돌아 가지 않습니다.위의 코드에서와 같이 사용자 정의 cb(err, data)
콜백 형식의 함수 (명명 된 또는 익명)를 만들 수 있습니다. 이 방법을 사용하면 콜백 cb(err, data)
이 다른 자바 스크립트 레이어로 돌아올 때까지 기다릴 수 있으므로 거의 모든 비동기 기능을 동기화 할 수 있습니다 (설명서 참조). 또한 cb(err, data)
콜백을 사용하여 비동기로 래핑하는 함수에서 벗어나는 모든 방법을 다뤘는지 확인하십시오. 그렇지 않으면 프로그램이 차단됩니다.
희망, 누군가를 도와줍니다.
업데이트 :
동기 요청을하는 방법을 사용하지 마십시오. 라이딩 약속 기반 동기 찾기 코드에 Async/Await을 사용하십시오. request-promise-native
npm 모듈을 사용하면 요청 모듈을 직접 포장하지 않아도됩니다.
Lai의 답변이 기술적으로 정확하므로 (답변으로 표시 했으므로) 궁극적 인 해결책은 더 많은 작업이 필요했습니다. https://gist.github.com/2234466에있는 샘플 코드의 패턴을 사용할 수 있습니다. – Trindaz