我正在使用一信号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()方法在得到响应之前被执行。请告诉我如何处理?表示如何等到我的nesignal.push()完全呼叫
,因为Onesignal's getUserId()异步运行,因此您的setNotificationPermission()
必须 or 都会异步。这意味着setNotificationPermission()
必须"等待" getUserId()
在能够回复之前完成。
Oneignal的getUserId()
功能接受回调并返回承诺,因此您可以:
-
选项1:在
getUserId()
回调中调用postMessage()
:OneSignal.push(["getUserId", function(userId) { window.parent.postMessage(userId); });
-
选项2:
getUserId()
CC_9 promise解决方案:OneSignal.push(function() { OneSignal.getUserId() .then(function(userId) { window.parent.postMessage(userId);
}); });
第一个选项是最直接的。第一个选项调用 postMessage()
在回调getUserId()
中检索了用户ID。