2015-02-04 11 views
6

कहें कि मेरे पास दो अवलोकन हैं और एक मैं एक अवलोकन में परिवर्तनों को सुनना चाहता हूं, अगर दूसरा एक निश्चित स्थिति से मेल खाता है। मैंने इसे zip के साथ करने की कोशिश की लेकिन ऐसा लगता है कि मुझे केवल अवलोकन बदलते हैं, लेकिन मैं एक अवलोकन योग्य पर हर बदलाव के लिए अधिसूचित होना चाहता हूं, अगर दूसरे की स्थिति सच है, तो मुझे केवल सूचित किया जाएगा।आरएक्सजेएस: मैं पर्यवेक्षकों के साथ "अगर" कैसे कर सकता हूं?

मैं क्या करने की कोशिश की:

var firstState = new Rx.BehaviorSubject(undefined); 
var secondState = new Rx.BehaviorSubject(undefined); 

Rx.Observable.zip(firstState, secondState, function (first, second) { 
    return { 
    first: first, 
    second: second 
    } 
}).filter(function (value) { 
    return value.first !== undefined; 
}).subscribe(function (value) { 
    // do something with value.second 
}); 

मैंने देखा है एक Rx.Observable.if, लेकिन मैं यह काम करने के लिए नहीं मिला सकता है।

उत्तर

7

उपयोग pausable:

secondState 
    .pausable(firstState.map(function (s) { return s !== undefined; })) 
    .subscribe(function (second) { 
     // only occurs when first is truthy 
    }); 
+1

यह शानदार है! – Pipo

0

ज़िप का शाब्दिक अर्थ है। यह दो अलग-अलग अनुक्रमों में संबंधित तत्वों को ले जाता है। आप जो हासिल करने की कोशिश कर रहे हैं वह कई अलग-अलग तरीकों से किया जा सकता है।

firstState.combineLatest(secondState, function(f, d) { 
 
    return f == 10 && d > 10; 
 
}).filter(function(val) { return val }) 
 
    .subscribe(function(v) { console.log(v); }); 
 

 
firstState.onNext(10); 
 
secondState.onNext(20);

यह तरीकों में से एक है।

+0

अपने जवाब के लिए धन्यवाद, लेकिन मैं Brandons का जवाब है, क्योंकि यह मेरी समस्या और भी बेहतर से मेल खाता स्वीकार कर लिया। – Pipo

संबंधित मुद्दे

 संबंधित मुद्दे