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