繁体   English   中英

从Java中的提供者Promise函数返回数据

[英]Returning data from provider promise function in Javascript

我有一个提供程序,应允许我从所需的API返回特定数据。 我有这样做的功能:

public getStoryCount(key: string, val: number) {
    return this.client.getEntries({
        'content_type': xxxxxxxxxxxxxx,
        [key]: val,
    }).then((entries:any) => {
        return entries.total;
    });
}

这是我第一次真正使用Promise,但是我试图在组件中调用它以获取价值。 我希望能够获取console.log获取输出时的值entry.total。

我正在构建一个数据数组,以便在我的视图中使用,如下所示:

this.homeScreen.push({
  'count': Provider.getStoryCount('sys.id', xxxx)
});

当我console.log Provider函数时,我可以在promise中看到该值,它看起来像这样:

__zone_symbol__state : true
__zone_symbol__value : 13 // this is the value I need to get

如何将数字13保存到数组homeScreen ['count']值中? 还是我做错了什么?

您当前正在返回Promise而不是实际值。 这意味着将组件代码修改为此:

Provider.getStoryCount('sys.id', xxxx)
    .then((entries:any) => {
        this.homeScreen.push({
          'count': entries.total
        });
    }
});

应该管用。

您还可以使您的Provider服务获取值并将其存储为Observable,以便组件随后可以订阅该值。

由于Promise是异步的,因此您实际上并没有像您想象的那样返回entry.total。

您可能需要提供自己的回调函数,或者简单地返回promise(由this.client.getEntries生成), then将then附加到结果上。 它可能看起来像这样:

public getStoryCount(key: string, val: number) {
    return this.client.getEntries({
        'content_type': xxxxxxxxxxxxxx,
        [key]: val,
    });
    // The 'then' will be added later
}

// ...

// Get the promise from the provider, and invoke 'then' here.
var storyCountPromise = Provider.getStoryCount('sys.id', xxxx);
storyCountPromise.then((entries:any) => {
    this.homeScreen.push({
      'count': entries.total
    });
});

这是一个异步操作。 你需要通过一个功能then

Provider.getStoryCount('sys.id', xxxx)
  .then((total) => {
    this.homeScreen.push({
     'count': total
    });
  });

首先,要将承诺的结果映射到另一个值,请使用map。

public getStoryCount(key: string, val: number) {
    return this.client.getEntries({
        'content_type': xxxxxxxxxxxxxx,
        [key]: val,
    }).map((entries:any) => {
        return entries.total;
    });
}

然后在调用promise返回函数时使用then获取结果

Provider.getStoryCount('sys.id', xxxx).then((total) => ...use total...);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM