我有以下代码将我的iOS设备注册到我的APNS服务器:
pushNotification.registerDevice({
alert: true,
badge: true,
sound: true,
pw_appid: "***",
appname: "***"
},
function (status) {
var deviceToken = status['deviceToken'];
},
function (status) {
console.warn('failed to register : ' + JSON.stringify(status));
navigator.notification.alert(JSON.stringify(['failed to register ', status]));
});
这会运行onLoad
,但我需要访问deviceToken
范围之外的pushNotification.registerDevice() function (status)
。
在这种情况下,是否有可能在函数外部访问函数内函数内的deviceToken
?
我以为我可以使用window.deviceToken
将其作为全局变量,然后再调用它,但它返回undefined。
答案 0 :(得分:3)
您可以为deviceToken
提供更广泛的范围:
var deviceToken;
pushNotification.registerDevice({
alert: true,
badge: true,
sound: true,
pw_appid: "***",
appname: "***"
},
function(status) {
deviceToken = status['deviceToken'];
},
function(status) {
console.warn('failed to register : ' + JSON.stringify(status));
navigator.notification.alert(JSON.stringify(['failed to register ', status]));
});
答案 1 :(得分:2)
将其更改为使deviceToken
成为全局变量,以便通过直接引用全局范围在外部作用域中可用。
function (status) {
window.deviceToken = status['deviceToken'];
},
如果您只想在父范围内(不一定在全局范围内),可以在所需的父范围内定义它,然后在您的函数中重新声明它:
var deviceToken;
pushNotification.registerDevice({
alert: true,
badge: true,
sound: true,
pw_appid: "***",
appname: "***"
},
function (status) {
deviceToken = status['deviceToken'];
},
function (status) {
console.warn('failed to register : ' + JSON.stringify(status));
navigator.notification.alert(JSON.stringify(['failed to register ', status]));
});
答案 2 :(得分:2)
如果您将令牌分配给全局并在尝试使用它时发现它未定义,您可能会找到它,因为registerDevice ajax尚未收到响应。
尝试将回调分离为单独的函数,然后从那里启动任何相关函数。
function registerSuccess(status) {
// Store token globally
token = status["deviceToken"];
// or pass as an argument
// call functions that depend on the token
Foo(token);
Bar(); // uses global
}
就个人而言,我会尝试传递作为参数,除了污染全局命名空间。