0

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

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

每个功能都可以单独使用,而不是组合在一起。

我曾考虑将其添加到按钮单击事件的调用函数中,但正如日志显示的那样,该函数在“then”完成之前返回。

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

4

1 回答 1

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 上一切正常……如果我忘记了什么,请告诉我。

  • 角度/cli:1.2.6
  • 节点:6.9.4
  • 离子:3.7.0
于 2017-08-08T07:29:06.293 回答