2016-06-15 128 views
0

我正在使用单信号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()调用得到完全

回答

1

因为OneSignal的getUserId()异步运行,您必须setNotificationPermission()异步操作。这意味着setNotificationPermission()必须“等待”getUserId()才能够回复。

OneSignal的getUserId()函数接受回调并返回一个Promise,所以您可以:

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

  • 选项2:致电postMessage()getUserId()Promise resolves OneSignal.push(function() { OneSignal.getUserId() .then(function(userId) { window.parent.postMessage(userId);
    }); });

第一个选项是最直接的。第一个选项在之后调用postMessage(),用户标识已被检索,回调为getUserId()

相关问题