bemdev
@bemdev

Сallback request node js как получить данные этого метода в requeste?

Доброе время суток, господа и дамы)

недавно перешел на node js и программирую не так долго и что то из учебника явно не могу понять.

я использую node + ym и не могу понять как мне прокинуть данные после request внутри метода модуля

modules.define('clients', function(provide){

	provide({

		getClients: function(){

			/* Получаем список суб-клиентов агенства (или представителей) */

				var sendQ = {
				   "method": "GetClientsList",
				   "token": ""
				};

				var options = {
					url: "САЙТ",
					method: "POST",
					headers: {
					    'Content-Type': 'application/json; charset=utf-8',
					    'Authorization': 'Bearer'
					},
					json: true,
					body: sendQ
				};

				var clients = '';

				request(options, function (err, res, body) {
					var clients = body["data"];
					var client = clients.map(function(a){
						return a.Login;
					});
					// console.log(body);

					if(client[0] != false){
						console.log('Client list getty - OK - '+client[0]);
					}else {
						console.log('some problems');
					};
					return
				});

			return

			/* Список получен переходим к дальнейщим действиям */
		}

	});
});
  • Вопрос задан
  • 422 просмотра
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Во-первых, если request - это одноименный модуль из npm - то в параметр body он передает Buffer, если там json, то его надо спарситьvar clients = JSON.parse(body.toString()).data
Во-вторых, сам запрос асинхронный, проще всего обернуть его в промис, итого будет что-то вроде этого:
modules.define('clients', function(provide){

  provide({

    getClients() { //неименнованные функции - плохо для отладки, поэтому меняем на es2015 метод

      /* Получаем список суб-клиентов агенства (или представителей) */

        var sendQ = {
           "method": "GetClientsList",
           "token": ""
        };

        var options = {
          url: "САЙТ",
          method: "POST",
          headers: {
              'Content-Type': 'application/json; charset=utf-8',
              'Authorization': 'Bearer'
          },
          json: true,
          body: sendQ
        };

        //удалить, оно тут не надо
        //var clients = '';

        return new Promise((resolve, reject) => request(options, (err, res, body) => {
          if(err) {
            return reject(err); //прокидываем ошибку в промис
          }
          var clients = JSON.parse(body.toString()).data;
          var client = clients.map(a => a.Login);

          if(!client[0]) {
            console.log('Client list getty - OK - ' + client[0]);
            resolve(client[0]); //возвращаем client[0] из промиса
          } else {
            console.log('some problems');
            reject(new Error('some problems'));
          };
        })).then(client => {
      /* Список получен переходим к дальнейщим действиям */
        }).catch(err => {
          /* здесь обрабатываем ошибку */
        });
    }
  });
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы