如何在一个信号中等待异步调用完成 api

How to wait for asynchronous call to get finished in one-signal api

我正在使用单信号 API 进行通知。我想从那里获取用户 ID API,下面是我的代码。

function setNotificationPermission()
{
    var id ;
    try
    {   
          OneSignal.push(["getUserId", function(userId) { 
          console.log("OneSignal User ID inside:"+ userId); 
            id = userId;
    }]); 
         console.log("OneSignal User ID outside:"+ id);
         window.parent.postMessage("Player ID"+id, "http://example.com");
    }
    catch(e){}
}  

我得到的答案如下

OneSignal User ID outside:
OneSignal User ID inside: f39fd4f1-406f-4c96-8365-5a471f77da3d

因为我调用一个信号的方法是异步的,所以我的 window.parent.postMessage() 方法在得到响应之前执行。请告诉我如何处理?意味着如何等到我的 OneSignal.push() 完全调用

因为 OneSignal 的 getUserId() 异步操作,您的 setNotificationPermission() 必须 异步操作。这意味着 setNotificationPermission() 必须 "wait" 完成 getUserId() 才能回复。

OneSignal 的 getUserId() 函数接受回调和 returns Promise,因此您可以:

  • 选项 1:getUserId() 回调中调用 postMessage() OneSignal.push(["getUserId", function(userId) { window.parent.postMessage(userId); });

  • 选项 2:getUserId() Promise resolves 时调用 postMessage() OneSignal.push(函数() { OneSignal.getUserId() .then(函数(userId) { window.parent.postMessage(userId);<br> }); });

第一个选项最直接。在 getUserId().

的回调中,第一个选项在 检索到用户 ID 后调用 postMessage()