Angular 从then函数中获取值并将其放入变量中,以在操作中发送

Angular 从then函数中获取值并将其放入变量中,以在操作中发送,angular,typescript,ngrx,Angular,Typescript,Ngrx,我试图将my models服务数据传递给我的操作,这样我就可以更改列表中所有模型的状态,但我无法将它的值传递给变量,这样我就可以在我的_getModelsFromBd函数中返回它,将它传递给我的操作。下面是代码: 这是我的_getModelsFromBd代码: private _getModelsFromBd(): Modelo[] { var res2; this._modelsService.getModels().then(res => { res2 = res; conso

我试图将my models服务数据传递给我的操作,这样我就可以更改列表中所有模型的状态,但我无法将它的值传递给变量,这样我就可以在我的_getModelsFromBd函数中返回它,将它传递给我的操作。下面是代码:

这是我的_getModelsFromBd代码:

private _getModelsFromBd(): Modelo[] {
var res2;
this._modelsService.getModels().then(res => {
  res2 = res;
  console.log('res2 value inside then: ', res2);
});
console.log('res2 value outside then: ', res2)
return res2;  }
这就是我将价值传递给行动的地方:

 @Effect()
getModelos$ = this._actions$.pipe(
ofType<GetModelos>(EModeloActions.GetModelos),
map(action => action.type),
withLatestFrom(this._modelsService.getModels()),
switchMap(async ([code, models]) => {
  console.log("value of function: ",this._getModelsFromBd());
  return of(new GetModelosSuccess(this._getModelsFromBd()));
}));
@Effect()
getModelos$=此.\u操作$.pipe(
类型(EModeloActions.GetModelos),
映射(action=>action.type),
使用LatestFrom(this.\u modelsService.getModels()),
开关映射(异步([代码,型号])=>{
log(“函数值:,this._getModelsFromBd());
返回(新的GetModelosSuccess(this.\u getModelsFromBd());
}));
这是我得到的输出

res2值在then之外:未定义

函数值:未定义

然后里面的res2值:(16)[{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…}]


感谢您抽出时间

我看到您正在调用idbHelper,它将在
getModels
方法中返回一个承诺。首先,我将通过以下代码将其转换为可观测:

  import { from, Observable } from 'rxjs';
  public getModels(): Observable<Modelo[]> {
    try {
      return from(IdbHelper.idbCon.select({ from: 'Modelos' })) as Observable<Modelo[]>;
    } catch (error) {
      throw error.message;
    }
  }

您是否有任何理由在这里返回承诺。_modelsService.getModels()?为什么不可观察?@SiddharthPal我无法使用可观察对象从本地数据库获取数据,我当前的代码是:
public async getModels():Promise{try{return(wait IdbHelper.idbCon.select({from:'Modelos',}))as Modelo[];}catch(error){throw error.message;}
  @Effect()
  getModelos$ = this._actions$.pipe(
    ofType<GetModelos>(EModeloActions.GetModelos),
    map(action => action.type),
    switchMap(() => {
      return this._modelsService.getModels()
        .pipe(map(modelos => new GetModelosSuccess(modelos)));
    })
  );