Firebase - Angularfire2 订阅等待对 return 值的响应
Firebase - Angularfire2 subscribe wait for response to return value
我对 Angularfire2 的异步操作有疑问。我想在我的 Firebase 数据库中创建一个新资源,但首先我想检查是否存在同名的资源,并 return 向前端发送一条消息。
问题是我无法 return 消息进入 subscribe
方法。 VS 抛出此错误:
Severity Code Description Project File Line Suppression State
Error TS2355 (TS) A function whose declared type is neither 'void' nor 'any' must return a value.
这是我的函数代码:
createInstance(instanceName: string): string {
this.databaseService.getList('/Events/' + instanceName).subscribe(
result => {
var message;
if (result.length === 0)
{
this.databaseService.update('/Events/' + instanceName + '/Configuration', myObject);
message = "Instance created";
}
else
{
message = "Instance already exists";
}
return message;
});
}
您 运行 的函数是异步的,因此您 subscribe
响应以便在操作完成时得到通知。
然而,您的函数是同步运行的,因此它会在数据库获取数据之前执行,returns,稍后会发生。
所以你得到的错误是因为你的函数实际上没有返回任何东西,但它被声明为返回一个 string
,你只能及时得到。
一个解决方案是将您的功能声明为 Observable
,就像您正在使用的数据库服务一样,并异步使用它。
例如:
// extra import you'll need
import { Observable } from 'rxjs';
createInstance(instanceName: string): Observable<string> {
return Observable.create(observer => {
this.databaseService.getList('/Events/' + instanceName).subscribe(result => {
if (result.length === 0) {
this.databaseService.update('/Events/' + instanceName + '/Configuration', myObject);
observer.next('Instance created');
} else {
observer.next('Instance already exists');
}
observer.complete();
});
});
}
然后你这样消费它:
createInstance('test').subscribe(message => {
// here you go
});
我对 Angularfire2 的异步操作有疑问。我想在我的 Firebase 数据库中创建一个新资源,但首先我想检查是否存在同名的资源,并 return 向前端发送一条消息。
问题是我无法 return 消息进入 subscribe
方法。 VS 抛出此错误:
Severity Code Description Project File Line Suppression State
Error TS2355 (TS) A function whose declared type is neither 'void' nor 'any' must return a value.
这是我的函数代码:
createInstance(instanceName: string): string {
this.databaseService.getList('/Events/' + instanceName).subscribe(
result => {
var message;
if (result.length === 0)
{
this.databaseService.update('/Events/' + instanceName + '/Configuration', myObject);
message = "Instance created";
}
else
{
message = "Instance already exists";
}
return message;
});
}
您 运行 的函数是异步的,因此您 subscribe
响应以便在操作完成时得到通知。
然而,您的函数是同步运行的,因此它会在数据库获取数据之前执行,returns,稍后会发生。
所以你得到的错误是因为你的函数实际上没有返回任何东西,但它被声明为返回一个 string
,你只能及时得到。
一个解决方案是将您的功能声明为 Observable
,就像您正在使用的数据库服务一样,并异步使用它。
例如:
// extra import you'll need
import { Observable } from 'rxjs';
createInstance(instanceName: string): Observable<string> {
return Observable.create(observer => {
this.databaseService.getList('/Events/' + instanceName).subscribe(result => {
if (result.length === 0) {
this.databaseService.update('/Events/' + instanceName + '/Configuration', myObject);
observer.next('Instance created');
} else {
observer.next('Instance already exists');
}
observer.complete();
});
});
}
然后你这样消费它:
createInstance('test').subscribe(message => {
// here you go
});