如何等待异步调用在单信号API中完成
问题描述:
我正在使用单信号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()调用得到完全
答
因为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()
。