我正在使用One-signal 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()完全调用
答案 0 :(得分:1)
由于OneSignal的getUserId()以异步方式运行,因此您的setNotificationPermission()
必须也异步运行。这意味着setNotificationPermission()
必须“等待”getUserId()
完成才能回复。
OneSignal的getUserId()
函数接受回调并返回Promise,因此您可以:
选项1:在postMessage()
回调中调用getUserId()
:
OneSignal.push(["getUserId", function(userId) {
window.parent.postMessage(userId);
});
选项2 :postMessage()
Promise resolves时致电getUserId()
:
OneSignal.push(function() {
OneSignal.getUserId()
.then(function(userId) {
window.parent.postMessage(userId);
});
});
第一种选择是最直接的。第一个选项在检索到用户ID后调用postMessage()
,回调到getUserId()
。