0

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

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() 完全接听电话

4

1 回答 1

3

因为 OneSignal 的getUserId()是异步操作的,所以你setNotificationPermission()必须异步操作。这意味着必须“等待”完成才能回复。setNotificationPermission()getUserId()

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

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

  • 选项 2:postMessage()getUserId() Promise 解决时调用: OneSignal.push(function() { OneSignal.getUserId() .then(function(userId) { window.parent.postMessage(userId);
    }); });

第一个选项是最直接的。第一个选项在检索到用户 IDpostMessage() getUserId()调用,在回调中调用.

于 2016-06-15T23:33:53.997 回答