Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 可观察:检查返回值是否为空 我想做的是:_Angular_Typescript_Async Await_Observable - Fatal编程技术网

Angular 可观察:检查返回值是否为空 我想做的是:

Angular 可观察:检查返回值是否为空 我想做的是:,angular,typescript,async-await,observable,Angular,Typescript,Async Await,Observable,我正在检查DB是否有匹配的日期。如果有匹配项,它将被发回。 我是通过GET请求来完成的 然后,在我的.ts类中,我想查看返回值是否为空 这是我的代码: 推荐的-section.service.ts checkRetValue(recommendedSection: RecommendedSection): boolean{ var checkNumber = this.checkOverlappingDates(recommendedSection); } async

我正在检查DB是否有匹配的日期。如果有匹配项,它将被发回。 我是通过GET请求来完成的

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

这是我的代码: 推荐的-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();
            });
    }
checkRetValue(recommendedSection:recommendedSection):布尔值{
var checkNumber=this.checkOverlappingDates(推荐部分);
}
异步检查重叠日期(recommendedSection:recommendedSection){
var copy=this.convert(推荐节);
var localarray=[];
recommendedSection.recommendedSectionNames.forEach((rsn)=>{
localarray.push(rsn.locale.id);
});
等待此消息。activeFromActiveToQuery({
active_from:copy.activeFrom,
活动收件人:copy.activeTo,
locale\u id:localarray
}).订阅((数据)=>{
变量数;
如果(data.json==“”){
retNumber=1;
}否则{
retNumber=0;
}
返回编号;
}),(res:ResponseWrapper)=>this.onError(res.json);
}
activeFromActiveToQuery(请求?:任意):可观察{
常量选项=createRequestOption(req);
options.params.append(“active\u from”,requ.active\u from);
options.params.append(“active_-to”,requ.active_-to);
options.params.append(“locale\u id”,req.locale\u id);
返回this.http.get(this.resourceActiveFromActiveToURL,选项)
.map(res=>{
返回res.json();
});
}
我的问题是: 是否可以将
retNumber
返回到函数
checkRetValue


我尝试了很多建议,但找不到一个对我有效的建议。

您可以使用管道中的映射方法转换结果,然后返回使用将解析为数字的可观测值。

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

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()方法,而是使用了
.first().toPromise()


这可能不是最好的答案,但目前效果很好。

您是否尝试返回订阅函数返回值?是的,这很有效。但是我仍然无法在
checkOverlappingDates
中传递
data
的值,如果我在控制台中打印它,它现在是一个数字。但是,如果我想将其交给类型为number的变量,我会得到以下错误:“ResponseWrapper”类型不可分配给“number”类型。您可以更改输出:(res:ResponseWrapper)=>this.onError(res.json)。您可以返回默认数字并记录错误,而不是返回this.onError(res.json)。