0

已得到一个提供程序异步函数,使用angularfire2/auth创建一个新用户...我一直在跟踪控制台日志的进度,因为chrome不能很好地承诺(或者我可以没有得到它的工作),并发现我正在进入承诺的“当时”组成部分,并获得一个用户,以便创建用户。 然后,我然后调用另一个异步函数(从“然后”函数),在数据库上创建一个配置文件对象,但这个函数永远不会被调用...不知道发生了什么。Angularfire2承诺完成不调用函数

我发现承诺并不是所有承诺的...有没有人有承诺履行承诺的例子?

每个功能都能正常工作,只是没有组合。

我曾想过将它添加到按钮单击事件的调用函数,但随着日志向我显示,函数在'then'完成之前返回。

是否有任何方法阻止承诺或阻止函数返回,直到承诺完成。我已经尝试了与同样问题的功能异步/等待。

回答

0

我完全塞满了......是承诺提供了完成/错误(promise.then(完成).catch(错误))的返回函数,但每个承诺都是异步的...所以它们可以是以任何顺序调用,调用函数可能会在函数返回前完成...因此异步/等待命令...我喜欢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