सबसे पहले, आपको request पर एक नज़र है, जो HTTP अनुरोध के लिए सबसे लोकप्रिय विकल्प है, अपनी सादगी की वजह से लेने के लिए चाहता हूँ।
दूसरा, हम उत्तराधिकार में एकाधिक अनुरोध करने के लिए, वादा फ्लैट में रखते हुए, अनुरोधों की सादगी के साथ अनुरोध की सादगी को जोड़ सकते हैं।
request-promise
var rp = require('request-promise')
var url1 = {}
var url2 = {}
var url3 = {}
rp(url1)
.then(response => {
// add stuff from url1 response to url2
return rp(url2)
})
.then(response => {
// add stuff from url2 response to url3
return rp(url3)
})
.then(response => {
// do stuff after all requests
// If something went wrong
// throw new Error('messed up')
})
.catch(err => console.log) // Don't forget to catch errors
का उपयोग करके आप देख सकते हैं, हम के रूप में कई अनुरोधों के रूप में हम चाहते हैं जोड़ सकते हैं, और कोड फ्लैट और सरल रहना होगा। बोनस के रूप में, हम त्रुटि-हैंडलिंग भी जोड़ सकते थे। पारंपरिक कॉलबैक का उपयोग करके, आपको प्रत्येक कॉलबैक में त्रुटि-प्रबंधन जोड़ना होगा, जबकि यहां हमें केवल वादा श्रृंखला के अंत में इसे करना होगा।
अद्यतन (16/09): जबकि वादे हमें आधे रास्ते वहाँ ले, आगे अनुभव ने मुझे आश्वस्त किया है कि अकेले वादे गंदा मिलता है जब वहाँ सिंक, async कोड के बीच मिश्रण का एक बहुत है, और विशेष रूप से प्रवाह को नियंत्रित (जैसे अगर -अन्य)। इसे हल करने का वैधानिक तरीका async/await के साथ होगा, हालांकि यह अभी भी विकास में है और इसके लिए ट्रांसमिशन की आवश्यकता होगी। इस प्रकार, generators अगला सबसे अच्छा समाधान है।
का उपयोग co
var co = require('co')
var rp = require('request-promise')
var url1 = {}
var url2 = {}
var url3 = {}
co(function*() {
var response
response = yield rp(url1)
// add stuff from url1 response to url2
response = yield rp(url2)
// add stuff from url2 response to url3
response = yield rp(url3)
// do stuff after all requests
// If something went wrong
// throw new Error('messed up')
})
.catch(err => console.log) // Don't forget to catch errors
अद्यतन (12/16): अब नवीनतम लिखने के समय नोड के संस्करण (7.2.1) का समर्थन करता async/इंतजार --harmony
ध्वज के पीछे, तुम कर सकते हो यह:
const rp = require('request-promise')
const url1 = {}
const url2 = {}
const url3 = {}
async function doRequests() {
let response
response = await rp(url1)
// add stuff from url1 response to url2
response = await rp(url2)
// add stuff from url2 response to url3
response = await rp(url3)
// do stuff after all requests
// If something went wrong
// throw new Error('messed up')
}
doRequests()
.catch(err => console.log) // Don't forget to catch errors
काफी जवाब मैं टाइप कर रहा था। 'अनुरोध' और वादा का उपयोग कर दोनों उत्कृष्ट सुझाव हैं। –
धन्यवाद लेकिन मुझे अभिव्यक्ति कथन प्राप्त हो रहा है एक असाइनमेंट या कॉल नहीं है। क्या अनुरोध करने के अलावा मुझे एक और पुस्तकालय जोड़ने की ज़रूरत है? .then (प्रतिक्रिया => { –
हम्म, आपको किसी अन्य पुस्तकालय की आवश्यकता नहीं है। ES5 में लिखने का प्रयास करें, आपका नोड संस्करण वसा तीर नोटेशन का समर्थन नहीं कर सकता है। तब (फ़ंक्शन (प्रतिक्रिया) {...}) –