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

私が1つのシグナルを呼び出しているメソッドは非同期であるため、応答を取得する前に私の window.parent.postMessage() メソッドが実行されます。対処方法を教えてください。私の OneSignal.push() が完全に呼び出されるまで待つ方法を意味します

4

1 に答える 1

3

OneSignal のgetUserId()は非同期で動作するため、非同期で動作するsetNotificationPermission()必要があります。これは、応答できるようになる前に完了するまでsetNotificationPermission()「待機」する必要があることを意味します。getUserId()

OneSignal の関数はコールバックを受け入れてPromisegetUserId()を返すため、次のいずれかを実行できます。

  • オプション 1:コールバックpostMessage()内で呼び出すgetUserId(): OneSignal.push(["getUserId", function(userId) { window.parent.postMessage(userId); });

  • オプション 2: Promise の解決postMessage()時に呼び出す: getUserId() OneSignal.push(function() { OneSignal.getUserId() .then(function(userId) { window.parent.postMessage(userId);
    }); });

最初のオプションは最も簡単です。最初のオプションは、ユーザー ID が取得されたpostMessage() getUserId()、 へのコールバックで呼び出されます。

于 2016-06-15T23:33:53.997 に答える