मैं आरएक्स के लिए नया ब्रांड हूं और मुझे वादे लिखने पर दस्तावेज ढूंढना मुश्किल लगता है जैसे कि पहले वादे से डेटा दूसरे में पारित किया जाता है। यहां तीन बहुत ही बुनियादी वादे हैं, डेटा पर गणना महत्वपूर्ण नहीं है, बस पिछले वादे से डेटा का उपयोग करके कुछ एसिंक को किया जाना चाहिए।आरएक्सजेएस वादा संरचना (डेटा उत्तीर्ण)
const p1 =() => Promise.resolve(1);
const p2 = x => { const val = x + 1; return Promise.resolve(val); };
const p3 = x => {
const isEven = x => x % 2 === 0;
return Promise.resolve(isEven(x));
};
रचना के बारे में मैं बात कर रहा हूँ प्राप्त करने के लिए परंपरागत तरीके:
R.pipeP(p1, p2, p3, console.log)()
ऐसा लगता है की संभावना आरएक्स सक्षम हो सकता है:
pl().then(p2).then(p3).then(console.log);
मेरा पसंदीदा कार्यान्वयन Ramda के composeP और pipeP है इस तरह की स्थिति को बहुत आसानी से संभालने के लिए।
var Rx = require('rx'),
fs = require('fs'),
path = require('path');
var file = path.join(__dirname, 'file.txt'),
dest = path.join(__dirname, 'file1.txt'),
exists = Rx.Observable.fromCallback(fs.exists),
rename = Rx.Observable.fromNodeCallback(fs.rename),
stat = Rx.Observable.fromNodeCallback(fs.stat);
exists(file)
.concatMap(function (flag) {
return flag ?
rename(file, dest) :
Rx.Observable.throw(new Error('File does not exist.'));
})
.concatMap(function() {
return stat(dest);
})
.forEach(
function (fsStat) {
console.log(JSON.stringify(fsStat));
},
function (err) {
console.log(err);
}
);
concatMap होनहार लगता है, लेकिन इसके बाद के संस्करण कोड सुंदर भीषण दिखता है: हालांकि, सबसे करीब मैं अब तक मिल गया है (पुस्तकालय) यहाँ https://github.com/Reactive-Extensions/RxJS/blob/master/doc/mapping/async/comparing.md तुलना async को RxJS से है। मुझे अपने उदाहरण में भी परेशानी हो रही थी क्योंकि Rx.Observable.fromromromise (p1) काम नहीं करेगा क्योंकि यह एक वादा की अपेक्षा करता है, एक समारोह नहीं, और Rx.Observable.defer (p1) पैरामीटर को पारित नहीं करता है उदाहरण।
धन्यवाद!
इसी प्रकार के प्रश्न लेकिन डेटा गुजर बिना: Chaining promises with RxJS
क्या आपके वादों को किसी फ़ंक्शन में लपेटना है? – user3743222
केवल उसमें यदि आपने वादा श्रृंखला के बाहर एक वादा इनलाइन परिभाषित की है या कुछ ऐसा है जो कॉन्स पी 1 = नया वादा ((संकल्प, अस्वीकार) => {}) के साथ देखा जा सकता है, तो यह तुरंत मूल्यांकन करना शुरू कर देगा और पहले से डेटा प्राप्त नहीं कर सका निष्पादित वादा या क्या मैं तत्काल मूल्यांकन के बारे में गलत हूं? –