Javascript:更改全局变量,但在不使用“Promise”的功能中?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (81)

我的问题是:我如何编辑全局变量“token”?我想重用该函数中定义的那个var的新值。我知道这是不可能的,但是有什么方法可以适应这种情况,所以我可以重新使用新的价值?

我现在知道,我无法真正改变这种情况,但是如果我重复使用“标记”,例如:

   console.log(token);

返回值是“变量未定义”,但我将其定义在顶部。

我的代码如下:

//libary:
var Particle = require('particle-api-js');
//neues Objekt:
var particle = new Particle();
//username, psw. etc definieren:
var userName = 'email.adress';
var passWord = 'passssword';
//Scriptvariablen:
var token;

//Funktionen:
function logontoparticle(){
        var test = particle.login({username: userName, password: passWord});
        test.then(
        function (data) {
                token = data.body.access_token;
                console.log('Logged In: with', token);
                },
        function (err) {
                console.log('LoggingIn Feeehlgeschalgen', err);
                }
);
}

logontoparticle();
console.log("at end", token);

最后我得到了回报:

"at end undefined"
"token1234567891010201239" (e.g.)
提问于
用户回答回答于

你的logontoparticle函数执行异步代码,这意味着你不知道什么时候它会完成,同样,由于闭包,你的token变量确实正在写入,问题是你在异步代码运行之前打印。

你可以尝试这样的:

var token;

//Funktionen:
function logontoparticle() {
  var test = particle.login({ username: userName, password: passWord });
  return test.then(
    function(data) {
      token = data.body.access_token;
      console.log("Logged In: with", token);
    },
    function(err) {
      console.log("LoggingIn Feeehlgeschalgen", err);
    }
  );
}

logontoparticle().then(function() {
  console.log("at end", token);
});

扫码关注云+社区

领取腾讯云代金券