在服务中调用服务并返回异步结果?
Calling a service in a service and returning async result?
Using Angular 5. 组件调用服务。在进行服务器调用之前,该服务必须调用另一个服务。我无法在组件中异步获取结果。为了简洁起见,我在下面使用省略号。
组件:
...
import { SystemOnlineService } from '../services/system-online.service';
...
constructor(private sys: SystemOnlineService) {
sys.getStatus()
.then(result => {
console.log(result);
});
}
系统在线服务:
import { Injectable } from '@angular/core';
import { Wakanda } from './wakanda.service';
import 'rxjs/add/operator/toPromise';
...
getStatus() {
this.wakanda.getCatalog()
.then((ds) => {
this.ds = ds;
this.ds.Rpc_reportObjectHelper.isMySystemUp()
.then(statusArr => {
return statusArr;
});
});
}
组件抛出关于 sys.getStatus()
调用的错误:
Uncaught (in promise): TypeError: Cannot read property 'then' of undefined
如果我 console.log(sys.getStatus());
,它会记录 undefined
。
我想我只是遗漏了一些有关如何正确进行异步调用的内容。
'getStatus()' 应该return 一个承诺。现在,return什么都没有了。
你可以这样改写:
getStatus() {
return new Promise( resolve => {
this.wakanda.getCatalog()
.then((ds) => {
this.ds = ds;
return this.ds.Rpc_reportObjectHelper.isMySystemUp()
.then(statusArr => {
resolve(statusArr);
});
});
})
}
或者,更好的是,如果这段代码没有任何逻辑,您可以删除不需要的代码(使用箭头函数):
getStatus() {
return new Promise( resolve => {
this.wakanda.getCatalog()
.then( ds => ds.Rpc_reportObjectHelper.isMySystemUp().then( data => resolve(data)) )
})
}
Using Angular 5. 组件调用服务。在进行服务器调用之前,该服务必须调用另一个服务。我无法在组件中异步获取结果。为了简洁起见,我在下面使用省略号。
组件:
...
import { SystemOnlineService } from '../services/system-online.service';
...
constructor(private sys: SystemOnlineService) {
sys.getStatus()
.then(result => {
console.log(result);
});
}
系统在线服务:
import { Injectable } from '@angular/core';
import { Wakanda } from './wakanda.service';
import 'rxjs/add/operator/toPromise';
...
getStatus() {
this.wakanda.getCatalog()
.then((ds) => {
this.ds = ds;
this.ds.Rpc_reportObjectHelper.isMySystemUp()
.then(statusArr => {
return statusArr;
});
});
}
组件抛出关于 sys.getStatus()
调用的错误:
Uncaught (in promise): TypeError: Cannot read property 'then' of undefined
如果我 console.log(sys.getStatus());
,它会记录 undefined
。
我想我只是遗漏了一些有关如何正确进行异步调用的内容。
'getStatus()' 应该return 一个承诺。现在,return什么都没有了。 你可以这样改写:
getStatus() {
return new Promise( resolve => {
this.wakanda.getCatalog()
.then((ds) => {
this.ds = ds;
return this.ds.Rpc_reportObjectHelper.isMySystemUp()
.then(statusArr => {
resolve(statusArr);
});
});
})
}
或者,更好的是,如果这段代码没有任何逻辑,您可以删除不需要的代码(使用箭头函数):
getStatus() {
return new Promise( resolve => {
this.wakanda.getCatalog()
.then( ds => ds.Rpc_reportObjectHelper.isMySystemUp().then( data => resolve(data)) )
})
}