亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

異步函數不等待等待函數結束

異步函數不等待等待函數結束

至尊寶的傳說 2022-05-26 10:30:55
我有一個不能按預期工作的異步函數,這里是代碼:const onCreateCoachSession = async (event, context) => {  const { coachSessionID } = context.params;  let coachSession = event.val();  let opentokSessionId = 'prout';  await opentok.createSession({ mediaMode: 'relayed' }, function(    error,    session  ) {    if (error) {      console.log('Error creating session:', error);    } else {      opentokSessionId = session.sessionId;      console.log('opentokSessionIdBefore: ', opentokSessionId);      const sessionId = session.sessionId;      console.log('Session ID: ' + sessionId);      coachSession.tokbox = {        archiving: true,        sessionID: sessionId,        sessionIsCreated: true,      };      db.ref(`coachSessions/${coachSessionID}`).update(coachSession);    }  });  console.log('opentokSessionIdEnd: ', opentokSessionId);};我的函數 onCreateCoachSession 在 firebase 事件上觸發(它是一個云函數),但它并沒有結束 opentok.createSession 結束,我不明白為什么我之前放了一個 await 。誰能知道為什么我的代碼直接觸發最后一個控制臺日志(opentokSessionIdEnd)這是按 console.log 順序的屏幕截圖:這可能是我錯過的一個簡單的異步/等待問題,但我看不到什么。我提前感謝社區的幫助。
查看完整描述

2 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

你createSession在回調模式下使用(你給它一個回調函數),所以它不會返回一個 Promise,所以它不能被await編輯。


兩種解決方案:


1/ 在 Promise 模式下使用 createSession(如果允許,請參閱文檔)


let session = null;


try{

    session = await opentok.createSession({ mediaMode: 'relayed' })

} catch(err) {

    console.log('Error creating session:', error);

}

或 2/ 等待一個 Promise


let session;


try {

    session = await new Promise((resolve, reject) => {

        opentok.createSession({ mediaMode: 'relayed' }, (error, session) => {

            if (error) {

                return reject(error)

            }

            resolve(session);

        })

    })

} catch (err) {

    console.log('Error creating session:', err);

    throw new Error(err);

}


opentokSessionId = session.sessionId;

console.log('opentokSessionIdBefore: ', opentokSessionId);

// ...


查看完整回答
反對 回復 2022-05-26
?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

await 意味著它會等到 promise 被解決。我想在這種情況下沒有返回任何承諾。您可以創建自己的承諾并處理此案



查看完整回答
反對 回復 2022-05-26
  • 2 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號