NodeJS의 쉬운 요청
21421 단어 asyncawaitjavascriptnode
안녕!
오늘은 async/await를 사용하여 http/https 요청을 더 쉽게 만드는 방법을 알려드리겠습니다.
비동기/대기란 무엇입니까?
async
선언이 있는 함수는 await
식을 사용할 때 "일시 중지"될 수 있습니다.어떻게 작동하는지 보자…
Matrix(1999)에서 Trinity는 Neo에게
Folow the white rabbit
라는 메시지를 보냅니다. 이제 이 예제에서 Trinity는 비동기 자바스크립트에 문제가 있습니다.function sendMessageToNeo() {
partOne()
partTwo()
}
function partOne() {
setTimeout(() => {
console.log('follow the')
}, 1000)
}
function partTwo() {
setTimeout(() => {
console.log('white rabbit')
}, 500)
}
sendMessageToNeo()
산출
white rabbit
follow the
async/await
를 사용하여 Trinity를 도울 수 있습니다.async function sendMessageToNeo() {
await partOne()
await partTwo()
}
async function partOne() {
await wait(1000)
console.log('follow the')
}
async function partTwo() {
await wait(500)
console.log('white rabbit')
}
async function wait(ms = 0) {
return new Promise(r => setTimeout(r, ms))
}
sendMessageToNeo()
산출
follow the
white rabbit
🐰🐰🐰
프로젝트를 만들어 봅시다
프로젝트 폴더에 세 개의 파일 생성
패키지.json
{
"dependencies": {
"cheerio": "^1.0.0-rc.2",
"request": "^2.87.0"
}
}
cheerio
: html 조작에 사용됨request
: 요청하기request.js
const request = require('request')
async function get (url) {
return new Promise((resolve, reject) => {
request({ url, method: 'GET' }, (error, response, body) => {
if (error) return reject(error)
return resolve({ body, response })
})
})
}
async function post (url, data) {
return new Promise((resolve, reject) => {
request({ url, method: 'POST', data }, (error, response, body) => {
if (error) return reject(error)
return resolve({ body, response })
})
})
}
module.exports = {
get,
post
}
request.js
에서 요청에 대한 동기 논리를 만듭니다. async
선언 및 Promises
를 참조하십시오.app.js
const request = require('./request')
const cheerio = require('cheerio')
async function sendRequest () {
let { response, body } = await request.get(`https://www.google.com.br/search?q=node+js`)
if (response.statusCode !== 200) {
return error(response, body)
}
success(response, body)
}
function success (response, body) {
const $ = cheerio.load(body)
console.log(`Status: ${response.statusCode}`)
console.log(`Message: ${response.statusMessage}`)
console.log(`Request: ${$('.g').length} results found!`)
}
function error (response) {
console.log(`Status: ${response.statusCode}`)
console.log(`Message: ${response.statusMessage}`)
}
sendRequest()
app.js
에서 Google에 요청하고 성공 응답이 있는 경우 결과에서 개수를 인쇄합니다.산출
Status: 200
Message: OK
Request: 10 results found!
차이점을 확인하십시오
비동기/대기 없이
function sendRequest() {
request({ url: '_url', method: 'GET' }, (error, response, body) => {
if (error) return console.log(error)
console.log(body)
console.log(response)
})
}
sendRequest()
비동기/대기로
async function sendRequest() {
let { response, body } = await request.get(`_url`)
console.log(body)
console.log(response)
}
sendRequest()
결론
이 게시물에서 우리는 어떻게
async/await
코드를 더 아름답게 만드는지 볼 수 있으며 이 사람들과 함께 유명한 Callback Hell에 문제가 없습니다.콜백 지옥
function hell() {
functionOne('one', (err, one) => {
console.log(one)
functionTwo('two', (err, two) => {
console.log(two)
functionThree('three', (err, three) => {
console.log(three)
functionFour('four', (err, four) => {
console.log(four)
})
})
})
})
}
비동기/대기로
async function heaven() {
let one = await functionOne('one')
let two = await functionTwo('two')
let three = await functionThree('three')
let four = await functionFour('four')
console.log(one)
console.log(two)
console.log(three)
console.log(four)
}
따라서 async/await에 문제가 있거나 나에게 제안할 사항이 있으면 이 게시물에 의견을 보내주십시오.
안녕히 계세요! 곧 봐요!
Reference
이 문제에 관하여(NodeJS의 쉬운 요청), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nulldreams/easy-requests-in-nodejs-1fke텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)