Возврат объекта ответа суперагента из функции

Я использую superagent для вызовов HTTP API из Node.s, и вот как выглядит мой код прямо сейчас:

async function getProjectParameterValue(projectId, parameter) {
    let projectParamsUrl = "some/endpoint" + projectId + "/parameters/";
    let url = "http://baseUrl/" + projectParamsUrl + parameter;
    return await superagent.get(url).auth(userName, password)
        .type('json')
        .accept('json')
        .then(response => {
            return response.body;
        })
        .then(responseBody => {
            return responseBody;
        });
}

В этом случае функция getProjectParameterValue возвращает обещание, которое необходимо разрешить после внешнего вызова, например:

getProjectParameterValue("myProjectId", "someParameter")
    .then(responseBody => {
       log.info(responseBody);
    });

Я ищу способ, чтобы функция getProjectParameterValue напрямую возвращала объект ответа суперагента. Есть ли способ добиться этого?


person Akshay Maldhure    schedule 15.03.2019    source источник
comment
Не могли бы вы попробовать return response вместо return response.body внутри getProjectParameterValue?   -  person Viswanath Lekshmanan    schedule 15.03.2019


Ответы (1)


Вы можете добиться этого, используя обещания, подобные приведенным ниже.

function getProjectParameterValue(projectId, parameter) {
    let projectParamsUrl = "some/endpoint" + projectId + "/parameters/";
    let url = "http://baseUrl/" + projectParamsUrl + parameter;
    return new Promise(function(resolve, reject) {
        superagent.get(url).auth(userName, password)
        .type('json')
        .accept('json')
        .then(response => {
            //you can manupulate result set as per requirements. 
            return response.body
        })
        .then(result => {
            resolve(result)
        });
       };
  });

}

И вызвать функцию следующим образом:

(async () => {
    const responseBody = await getProjectParameterValue("myProjectId", "someParameter")
})();
person narayansharma91    schedule 15.03.2019
comment
Это решение работает, но я не уверен, что мне следует его использовать, так как у меня будет несколько таких функций, вызываемых синхронно друг за другом, и я боюсь, что мой код будет нечитаемым при таком подходе. - person Akshay Maldhure; 15.03.2019
comment
Хорошо. Что делать, если мне нужно добавить больше таких вызовов подряд? Как бы я достиг этого с таким подходом? - person Akshay Maldhure; 15.03.2019
comment
Вы можете добавить столько обратных вызовов, сколько захотите выше. Ответ обновлен. пожалуйста, проверьте - person narayansharma91; 15.03.2019