@Sp1keazyYT

Как из одной async функции полученное значение переменной передать в другую функцию на Node JS?

Добрый вечер. Имеется некая функция anticaptcha.getBalance:
var anticaptcha = require('./anticaptcha')('***'), image2base64 = require('image-to-base64');

anticaptcha.getBalance(async function (err, balance) {
    if (err) {
        console.error(err);
        return;
    }

    anticaptcha.setMinLength(5);

  const API_URL = 'https://api.vk.com/captcha.php?sid=159568716370&s=1';
  const body = await image2base64(API_URL).catch((error) => console.log(error));
	
    if (balance > 0) {
        anticaptcha.createImageToTextTask({
                case: true, // or params can be set for every captcha specially
                body
            },
            function (err, taskId) {
                if (err) {
                    console.error(err);
                    return;
                }

                console.log(taskId);

                anticaptcha.getTaskSolution(taskId, function (err, taskSolution) {
                    if (err) {
                        console.error(err);
                        return;
                    }

                    console.log(taskSolution);
                });
            }
        );
    }
});

А также кусок другой функции:
// Init app
(async _=> {
	setUTitle("Loading app");

	if(!VK_TOKEN) {
		let succ = await initToken();
		if(!succ) { process.exit(); }
	}
	vk.token = VK_TOKEN;

	vk.captchaHandler = async ({ src, type }, retry)=> {
		let key = await rl.questionAsync("Введи капчу ["+src+"]: ");

		try {
			await retry(key);
			con('Всё ок.');
		} catch (e) { con("Всё фигово. "+e.message, true); }
	};
})();

Задача такова: из первой функции anticaptcha.getBalance полученное значение константы taskSolution на 33 строке кода передать во вторую функцию, в которой вложена ещё функция vk.captchaHandler. В функции vk.captchaHandler есть переменная src - это ссылка на изображение. Логика этой функции такова: приходит ссылка на изображение в переменную src. Человеку в консоли выводится сообщение с просьбой ввести капчу и в скобках высвечивается ссылка на изображение капчи. Далее идёт цикл с ожиданием ввода этой капчи, если капча верна, то выводится сообщение "Всё ок". Нужно сделать так, чтобы не пришлось человеку вручную что-то вводить, значение с капчей должно уже приходить с первой функции в переменной taskSolution и получается подставляться в переменную key (в функции vk.captchaHandler). Надеюсь более менее понятно объяснил. Помогите пожалуйста.
  • Вопрос задан
  • 834 просмотра
Решения вопроса 1
@StockholmSyndrome
let getTaskSolution = (src) => {
  return new Promise((resolve, reject) => {
    anticaptcha.getBalance(async (err, balance) => { 
      if (err) {
        reject(err); 
        return;
      }

      anticaptcha.setMinLength(5);
      if (balance > 0) {
        anticaptcha.createImageToTextTask({
          case: true, // or params can be set for every captcha specially
          body: await image2base64(src).catch(reject)
        }, (err, taskId) => {
          if (err) {
            reject(err);
            return;
          }

          anticaptcha.getTaskSolution(taskId, (err, taskSolution) => {
            if (err) {
              reject(err);
              return;
            }

            resolve(taskSolution)
          });
        });
      }
    });
  });
};


(async () => {
  setUTitle("Loading app");

  if (!VK_TOKEN) {
    let succ = await initToken();
    if (!succ) { 
      process.exit(); 
    }
  }
  vk.token = VK_TOKEN;

  vk.captchaHandler = async ({src, type}, retry) => {
    let key = await getTaskSolution(src).catch((error) => console.log(error));
    try {
       await retry(key);
       con('Всё ок.');
    } catch (e) { 
      con("Всё фигово. " + e.message, true); 
    }
  };
})();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы