Asynchronous 如何在一个信号api中等待异步调用完成
我正在使用一个信号API进行通知。我想从API中获取用户Id,下面是我的代码Asynchronous 如何在一个信号api中等待异步调用完成,asynchronous,cross-domain,onesignal,window.parent,Asynchronous,Cross Domain,Onesignal,Window.parent,我正在使用一个信号API进行通知。我想从API中获取用户Id,下面是我的代码 function setNotificationPermission() { var id ; try { OneSignal.push(["getUserId", function(userId) { console.log("OneSignal User ID inside:"+ userId); id = userI
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){}
}
我得到的答案如下
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的操作是异步的,所以您的setNotificationPermission()
也必须异步操作。这意味着setNotificationPermission()
必须“等待”完成getUserId()
,然后才能回复
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的getUserId()
函数接受回调并返回一个值,因此您可以:
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){}
}
- 选项1:在
getUserId()回调中调用
:postMessage()
OneSignal.push([“getUserId”,函数(userId){ window.parent.postMessage(userId); });
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){}
}
postMessage()
当getUserId()调用时:
OneSignal.push(函数(){
OneSignal.getUserId()
.then(函数(用户ID){
window.parent.postMessage(userId);
});
});
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){}
}
第一个选项是最简单的。第一个选项在检索到用户ID后调用postMessage()
,在调用getUserId()
的回调中,因为OneSignal的操作是异步的,所以您的setNotificationPermission()
还必须异步操作。这意味着setNotificationPermission()
必须“等待”完成getUserId()
,然后才能回复
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的getUserId()
函数接受回调并返回一个值,因此您可以:
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){}
}
- 选项1:在
getUserId()回调中调用
:postMessage()
OneSignal.push([“getUserId”,函数(userId){ window.parent.postMessage(userId); });
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){}
}
postMessage()
当getUserId()调用时:
OneSignal.push(函数(){
OneSignal.getUserId()
.then(函数(用户ID){
window.parent.postMessage(userId);
});
});
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){}
}
第一个选项是最简单的。第一个选项在检索到用户ID后,在对getUserId()
的回调中调用postMessage()
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){}
}