Angularfire2承诺完成不调用函数

时间:2017-08-08 05:30:18

标签: javascript firebase angular2-services angularfire2 ionic2-select

有一个提供程序异步函数,使用angularfire2 / auth创建一个新用户...我一直在跟踪控制台日志的进度,因为chrome在promises中不能很好地工作(或者我无法让它工作)并发现我将进入promise的“then”组件并获取一个uid,以便创建用户。 然而,我然后调用另一个异步函数(来自“then”函数),在数据库上创建一个配置文件对象但是这个函数永远不会被调用...不知道会发生什么。

我发现所承诺的不是所有承诺的......有没有人在承诺后有一个履行承诺的例子?

每个功能都可以自行运行,但不能合并。

我曾想过将它添加到按钮点击事件的调用函数中,但是正如日志显示的那样,函数在'then'完成之前返回。

有没有办法阻止承诺或阻止函数返回,直到承诺完成。我已经尝试了同样的问题上的async / await。

1 个答案:

答案 0 :(得分:0)

我把它完全填满了...是的,promise为完成/错误提供了一个返回函数(promise.then(completed).catch(error))但是每个promise都是异步的...所以可以调用它们在任何顺序和调用函数可能会在函数返回之前完成...因此async / await命令...我喜欢Mostafa Gaafar他的文章。 基本上是:

async buttonClick(){
  let errMsg = '' as string;
  await myService.myFunction.then(ret =>{
    //ret is a string return with any error message...no messages then all 
     ok
      errMsg = ret;
   }).catch{e => {
      errMsg = e.message;
   }); //EO service function
   //if you have an error then do something else do something else
 } //EO buttonClick

async myService.myFunction(): Promise<string>{
 let errMsg = '' as string;
 let data1 = '' as string;
 await Promise1.then((data) =>{
     //first run
     data1.value;
  }).catch( e=>{
     errMsg = e.message;
  });
  if(errMsg == ''){
     //no errors so far
     await Promise2.then((data) =>{
        //second run
        //Do something
      }).catch( e=>{
         errMsg = e.message;
      });
  } //eo if
  return errMsg;
}

这将全部同步完成......

  • 按钮点击调用
  • 服务功能运行
  • promise1运行并完成
  • promise2运行并完成
  • 服务功能退出
  • 按钮单击退出

您也可以使用Try / Catch包装器返回错误消息。 已经测试了这个并且一切都适用于AngularFire2 ...让我知道我是否忘记了什么。

  • Angular / cli:1.2.6
  • node:6.9.4
  • Ionic:3.7.0