我在StackOverflow上查看了类似的问题,但没有一个与我的特定问题相符:
我在Angular 6服务中有一个TypeScript函数,在这样的另一个服务中调用了一个函数:
服务1:
myArray: Array<IMyInterface>
...
getArray(): Observable<IMyInterface[]> {
this.myArray= this.service2.getAnArray(1);
return Observable.of(this.myArray);
}
服务2
getAnArray(myEntityId): Array<IMyInterface> {
const myArray2: IMyInterface[] = [];
this.getConnection().then(connection => {
connection.invoke('GetEntityById', myEntityId).then((someJson: any) => {
someJson.forEach( x => myArray2.push(x));
return myArray2;
})
});
}
它给我Service2 A function whose declared type is neither 'void' nor 'any' must return a value.
中的错误
解析后,我需要返回myArray2
connection.invoke('GetEntityById', myId)
,因为只有在解析后才填充数组,这就是为什么我尝试在{{1 }}。
我该怎么做?
答案 0 :(得分:1)
这可能/可能不适合您的需求,但是您可以从服务方法中返回Promise
,例如:
getAnArray(myEntityId) {
const myArray: IMyInterface[] = [];
// Note the return here
return this.getConnection().then(connection => {
return connection.invoke('GetEntityById', myEntityId).then((someJson: any) => {
someJson.forEach( x => myArray.push(x));
return myArray;
})
});
}
您的调用代码将如下所示
getAnArray(someId).then(function(theArray) {. . .});
答案 1 :(得分:1)
为此有点晚了。但是有人可能会发现这很有帮助。 您可以为此使用异步/等待。原因是每次“等待”发生时,它将保持线程直到工作完成。
async getAnArray(myEntityId) {
await this.getConnection();
try {
let result = await connection.invoke('GetEntityById', myEntityId).then((someJson: any) => {
someJson.forEach(x => myArray.push(x));
return myArray;
})
} catch (err) {
console.log(err);
}
}
要获得结果(将返回承诺):
this.getAnArray(myEntityId).then((data) => {
console.log('data' , data);
});