मैं कोणीय 4/एनजीआरएक्स और आरएक्स के लिए बिल्कुल नया हूं इसलिए मुझे यकीन नहीं है कि मैं यहां क्या गलत कर रहा हूं। मेरे प्रभाव में मैं अपनी सेवा का उपयोग करके एक खोज निष्पादित करना चाहता हूं। विधि एक अवलोकन योग्य लौटाती है। फिर मैं एक नया पेलोड वापस करने के लिए मैप करता हूं।

यहाँ कोड है:

    @Effect() executeSearchEffect = this.actions.ofType(SEARCH_EXECUTE)
    .map((a: SearchExecuteAction) => {
        return this.searchService.doSearch(a.payload.search.searchText)
                   .map((r) => {
                        type: SEARCH_COMPLETE,
                        payload: a.payload   // just for testing,same as input!
                          }));
    });

उपरोक्त में, doSearch एक ऑब्जर्वेबल देता है। मुझे जो त्रुटि मिलती है वह है क्रियाओं में एक प्रकार की संपत्ति होनी चाहिए जिसे मैं यहां वापस कर रहा हूं।

अगर मैं नीचे दिए गए कोड को बदलता हूं तो यह बिना किसी आकर्षण के त्रुटियों के काम करता है:

    @Effect() executeSearchEffect = this.actions.ofType(SEARCH_EXECUTE)
    .map((a: SearchExecuteAction) => {
        return {
               type: SEARCH_COMPLETE,
               payload: a.payload   // just for testing,same as input!
               });

मैं यहां क्या गलत कर रहा हूं, मैं एक नई कार्रवाई भेजने के लिए अपनी सेवा से अवलोकन योग्य कैसे मैप करूं। ध्यान दें, मेरी क्रियाएँ सिर्फ इंटरफेस हैं इसलिए मैं एक नया SearchCompleteAction ({}) आदि नहीं कर सकता।

2
SBKDeveloper 3 अक्टूबर 2017, 03:40

2 जवाब

सबसे बढ़िया उत्तर

आपके पहले कोड में आप कुछ भी वापस नहीं कर रहे हैं। क्योंकि (e) => { } केवल एक दायरा खोलता है और कोई वस्तु वापस नहीं करता है। इसलिए आपका दूसरा कोड काम कर रहा है। ऐरे फ़ंक्शंस का उपयोग करते समय आपको किसी ऑब्जेक्ट को वापस करने के लिए return लिखना होगा।

इसके अलावा आपको वास्तव में ngrx-example पर एक नज़र डालने पर विचार करना चाहिए -ऐप.

2
cyr_x 26 फरवरी 2020, 10:48

यह मानते हुए कि searchService खोज के लिए एक http कॉल करता है, .map async कॉल की प्रतीक्षा न करें। आपको .flatMap का उपयोग करना चाहिए।

  @Effect() executeSearchEffect = this.actions.ofType(SEARCH_EXECUTE)
    .flatMap((a: SearchExecuteAction) => 
        this.searchService.doSearch(a.payload.search.searchText)
                   .map((r) => ({
                        type: SEARCH_COMPLETE,
                        payload: a.payload   // just for testing,same as input!
                          })));
    );
4
Vamshi 3 अक्टूबर 2017, 04:29