首页 > 解决方案 > 如何将值保存到函数的变量中?

问题描述

此代码使用 Nativescript 插件

let power = require("nativescript-powerinfo");

power.startPowerUpdates(function (Info) {
    console.log("battery charge: " + Info.percent + "%");
});

控制台日志:电池电量:100 %

我想将此 Info.percent 保存到一个变量中,以便以后可以重用它。

不幸的是,它总是说,它未定义。我尝试了不同的方法。

喜欢:

var batterystatus = power.startPowerUpdates(function(Info){
      return Info.percent;
}

或者

power.startPowerUpdates(function(Info){
          return Info.percent;

var batterystatus = power.startPowerUpdates(function);

或者我也试过:

var batterystatus = power.startPowerUpdates(function(Info){
          this.batterystatus = Info.percent
}

但几乎所有这些都提供了错误的结果。

typeof(Info.percent) = number

标签: javascriptangulartypescriptnativescript

解决方案


startPowerUpdates 方法将调用您传递给它的函数,但似乎 startPowerUpdates 不会返回相同的返回值。该函数要么被异步调用,要么根本没有被编程为返回相同的值。试试这个:

let power = require("nativescript-powerinfo");

let batteryPercent;

power.startPowerUpdates(function (Info) {
    batteryPercent = Info.percent;
    console.log("battery charge: " + batteryPercent + "%");
});

然后检查是否batteryPercent已设置。如果不是,则该函数被并行调用,您必须编写一个触发器来让程序知道该值已被设置。例子:

首先检查函数是否被同步调用(可能不是):

...

console.log(batteryPercent); // check the value here

如果控制台日志未定义,那么您将需要另一种方法:

let updateBatteryPercent = (newBatteryPercent) => {
    batteryPercent = newBatteryPercent;
    continueExecutionFunction();
}

// and now you should have:
power.startPowerUpdates(function (Info) {
    console.log("battery charge: " + Info.percent+ "%");
    updateBatteryPercent(Info.percent);
});

function continueExecutionFunction() {
    // here you should have whatever you'd like to
    // happen after you find out the battery percent
}

理想情况下,您应该使用 await 和 async 函数,但这更高级。不要和他们一起玩,直到像你遇到的问题很容易。


推荐阅读