如何在一个信号中等待异步调用完成 api
How to wait for asynchronous call to get finished in one-signal 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()
必须 "wait" 完成 getUserId()
才能回复。
OneSignal 的 getUserId()
函数接受回调和 returns Promise,因此您可以:
选项 1: 在 getUserId()
回调中调用 postMessage()
:
OneSignal.push(["getUserId", function(userId) {
window.parent.postMessage(userId);
});
选项 2: 在 getUserId()
Promise resolves 时调用 postMessage()
:
OneSignal.push(函数() {
OneSignal.getUserId()
.then(函数(userId) {
window.parent.postMessage(userId);<br>
});
});
第一个选项最直接。在 getUserId()
.
的回调中,第一个选项在 检索到用户 ID 后调用 postMessage()
我正在使用单信号 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()
必须 "wait" 完成 getUserId()
才能回复。
OneSignal 的 getUserId()
函数接受回调和 returns Promise,因此您可以:
选项 1: 在
getUserId()
回调中调用postMessage()
:OneSignal.push(["getUserId", function(userId) { window.parent.postMessage(userId); });
选项 2: 在
getUserId()
Promise resolves 时调用postMessage()
:OneSignal.push(函数() { OneSignal.getUserId() .then(函数(userId) { window.parent.postMessage(userId);<br> }); });
第一个选项最直接。在 getUserId()
.
postMessage()