可观察:检查返回值是否为空

时间:2020-10-20 13:42:55

标签: angular typescript async-await observable

我想做什么:

我正在检查数据库中是否有匹配的日期。如果有匹配项,它将被发回。 我通过GET请求执行此操作。

然后在我的.ts类中,查看返回的值是否为空。

这是我的代码:

recommended-section.service.ts

checkRetValue(recommendedSection: RecommendedSection): boolean{

        var checkNumber = this.checkOverlappingDates(recommendedSection);
    }

async checkOverlappingDates (recommendedSection: RecommendedSection) {
        var copy = this.convert(recommendedSection);
        var localeArray = [];
        recommendedSection.recommendedSectionNames.forEach( (rsn) => {
            localeArray.push(rsn.locale.id);
        });

        await this.activeFromActiveToQuery({
                active_from: copy.activeFrom,
                active_to: copy.activeTo,
                locale_ids: localeArray
            }).subscribe((data) => {
                var retNumber;
                if (data.json == "") {
                    retNumber = 1;
                } else {
                    retNumber = 0;
                }

                return retNumber;

            }), (res: ResponseWrapper) => this.onError(res.json);

    }

activeFromActiveToQuery(req?: any): Observable<ResponseWrapper>{
        const options = createRequestOption(req);
        options.params.append("active_from", req.active_from);
        options.params.append("active_to", req.active_to);
        options.params.append("locale_ids", req.locale_ids);

        return this.http.get(this.resourceActiveFromActiveToURL, options)
            .map(res => {
                return res.json();
            });
    }

我的问题:

是否可以将retNumber返回到函数checkRetValue

我尝试了很多建议,但找不到适合我的建议。

2 个答案:

答案 0 :(得分:0)

您可以在管道中使用map方法转换结果,然后返回可观察到的可观察到的数字。

答案 1 :(得分:0)

尝试了许多不同的解决方案后,这对我有用:

    listen=NO
    
    listen_ipv6=YES
    
    anonymous_enable=NO
    
    local_enable=YES
    
    write_enable=YES
    
    anon_upload_enable=YES
    
    anon_mkdir_write_enable=YES
    
    dirmessage_enable=YES
    
    use_localtime=YES
    
    xferlog_enable=YES
    
    connect_from_port_20=YES
    
    chroot_local_user=YES
    
    user_sub_token=$USER
    
    local_root=/home/$USER/ftp
    
    allow_writeable_chroot=YES
    
    pasv_enable=YES
    
    pasv_min_port=10000
    
    pasv_max_port=10010
    
    chroot_list_file=/etc/vsftpd.chroot_list
    
    secure_chroot_dir=/var/run/vsftpd/empty
    
    pam_service_name=vsftpd
    
    rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    
    rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    
    ssl_enable=NO

我使用async checkOverlappingDates(recommendedSection: RecommendedSection) { var copy = this.convert(recommendedSection); var localeArray = []; recommendedSection.recommendedSectionNames.forEach((rsn) => { localeArray.push(rsn.locale.id); }); var tester = await this.activeFromActiveToQuery({ active_from: copy.activeFrom, active_to: copy.activeTo, locale_ids: localeArray }).first().toPromise(); 而不是使用subscribe()方法。

这可能不是最好的答案,但现在可以正常工作了。