2016-06-15 162 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()

相關問題