Я пытаюсь импортировать библиотеку Rxjs в свой общий компонент utils в LWC. Я не могу этого добиться. Пожалуйста, помогите с этим Rxjs, js

import {
    LightningElement
} from 'lwc';
import {
    loadScript
} from "lightning/platformResourceLoader";
import rxjs from "@salesforce/resourceUrl/rxjs";

export default class Rxjs extends LightningElement {
    myMessage;
    connectedCallback() {
        loadScript(this, rxjs + "/Rx.min.js").then(() => {

            })
            .catch(error => {
                console.log("error" + JSON.stringify(error));
            });
    }

}

MessageService.js

import Rxjs from 'c/rxjs';

class messageService extends Rxjs {
    myMessage = new Subject();
    getMessage() {

         return this.myMessage.asObservable();
    }
    updateMessage(message) {        
        this.myMessage.next(message);
    }
}
export const {
    getMessage,
    updateMessage
} = new messageService()

И в моем компоненте LWC я пытаюсь использовать вот так

import {
  getMessage,
updateMessage
} from 'c/messageService'

Но я получаю всплывающее окно с ошибкой по умолчанию, предоставленное отделом продаж.

Error in $A.getCallback() [Unknown error creating component: c:firstComponent]
createComponentErrorProcessor()@https://chaarvim-dev-ed.lightning.force.com/libraries/force/componentLibrary/errors.js:10:307 

Не могли бы вы помочь мне, что я делаю неправильно

2
SFDC-Beginner 16 Апр 2020 в 07:37

1 ответ

Лучший ответ

Работает для меня

контроллер lwc:

import { LightningElement } from 'lwc';
import { loadScript } from 'lightning/platformResourceLoader';
import executeQuery from '@salesforce/apex/AccountsWithContact_cls.executeQuery'; // @AuraEnabled method

import reactivexUrl from '@salesforce/resourceUrl/ReactiveX'; // Static resource of https://unpkg.com/rxjs/bundles/rxjs.umd.min.js

export default class AccountsWithContacts extends LightningElement {

    renderedCallback() {
        Promise.all([
            loadScript(this, reactivexUrl)
        ]).then(() => {
            this.loadAccountsWithContacts();
            this.init
        }).catch(error => { })
    }

    /**
     * Returns an Observable that makes a call to a Salesforce method
     * @param {string} query soql query to execute in Salesforce
     */
    getData$( objParams = {} ) {
        return rxjs.defer( async () => {
            const response = await executeQuery(objParams);
            return response;
        }) ;
    }
    /**
     * Stream 1
     * List of Account
     */
    getAccountList$() {
        let query = 'SELECT Id, Name FROM Account ORDER BY CreatedDate DESC LIMIT 2';
        return this.getData$({ query });
    }

    loadAccountsWithContacts() {
        this.getAccountList$()
        .pipe(
            rxjs.operators.flatMap(( x ) => x)
        )
        .subscribe(( accounts ) => { // my subscription
            console.log('Accounts: ', { accounts });
        })
    }
}

Класс Apex:

public with sharing class AccountsWithContact_cls {

    public AccountsWithContact_cls() {
    }

    @AuraEnabled(cacheable = true)
    public static Object executeQuery( String query ) {
        return Database.query( query );
    }
}

Вызов метода Apex: введите здесь описание изображения

1
Carlos Alvarez 26 Апр 2020 в 08:50
Хорошо. Как использовать его в качестве общего контроллера.
 – 
SFDC-Beginner
27 Апр 2020 в 17:15