![](/img/trans.png)
[英]Returning a value from a Javascript function that includes a 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.