我有一个提供程序,应该允许我从我需要的API返回特定数据。我有这个功能:
public getStoryCount(key: string, val: number) {
return this.client.getEntries({
'content_type': xxxxxxxxxxxxxx,
[key]: val,
}).then((entries:any) => {
return entries.total;
});
}
这是我第一次真正使用promises,但我试图在一个组件中调用它来获取值。我希望能够获得值entry.total,当我在console.log中获取输出时。
我正在构建一个数据数组,以便在我的视图中使用,如下所示:
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']值?或者我做错了什么?
答案 0 :(得分:1)
您目前正在返回Promise
而非实际值。这意味着将组件代码修改为:
Provider.getStoryCount('sys.id', xxxx)
.then((entries:any) => {
this.homeScreen.push({
'count': entries.total
});
}
});
应该有用。
您还可以使Provider
服务获取值并将其存储为Observable,以便组件可以订阅该值。
答案 1 :(得分:1)
由于promises是异步的,因此您实际上并没有像想象的那样返回entries.total。
您可能需要提供自己的回调函数,或者只是返回promise(由this.client.getEntries生成)并将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
});
});
答案 2 :(得分:0)
这是一个异步操作。您需要在then
中传递函数:
Provider.getStoryCount('sys.id', xxxx)
.then((total) => {
this.homeScreen.push({
'count': total
});
});
答案 3 :(得分:0)
首先,要将promise的结果映射到另一个值,请使用map。
public getStoryCount(key: string, val: number) {
return this.client.getEntries({
'content_type': xxxxxxxxxxxxxx,
[key]: val,
}).map((entries:any) => {
return entries.total;
});
}
然后在调用promise returns函数时使用then
来获得结果
Provider.getStoryCount('sys.id', xxxx).then((total) => ...use total...);