Как сохранить значение в переменной функции? - PullRequest
0 голосов
/ 28 октября 2019

Этот код использует плагин 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) = число

1 Ответ

1 голос
/ 28 октября 2019

Метод 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, но это более продвинутый вариант. Не играйте с ними, пока проблемы, подобные той, что у вас возникли, не будут легкими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...