Когнитивные службы makeRequest всегда возвращают неопределенное значение

Я использую API Microsoft Cognitive Services для nodejs (joshbalfour/node-cognitive-services). Я следовал коду в соответствии с примером документации. Однако я обнаружил, что ответ всегда «не определен».

    face.listPersonGroups({
      parameters
    })
    .then((response) => {
        console.log('Got response:', response); //always undefined?
    })
    .catch((err) => {
        console.error('Encountered error making request:', err);
    });

Это вызов face.js из репозитория, makeRequest фактически делает запрос.

  return verifyParameters(operation, parameters)
        .then(makeRequest({
            operation,
            parameters,
            API_KEY
        }));

Если я запишу вывод на консоль в api.js, я увижу фактический ответ от API когнитивных служб (200 OK).

    const makeRequest = ({operation, parameters, body, API_KEY}) => {
    let headers = {
        'Ocp-Apim-Subscription-Key': API_KEY
    };
    let path = operation.uriTemplate;
    operation.parameters.forEach((param) => {
        if (parameters[param.name] && param.type == 1){
            path = path.split(`{${param.name}}`).join(parameters[param.name]);
            parameters[param.name] = undefined;
        }
    });

    let uri = `${operation.scheme}://${operation.host}/${path}`;
    const options = {
        uri,
        method: operation.method,
        headers,
        qs: parameters,
        json: true,
        body
    };
//if you output the response from 'rp' here we get the actual result (200 OK)

    return rp(options);

Таким образом, фактический вызов API работает нормально, но возврат значения — нет. Если кто-нибудь может объяснить, почему ответ в моем контроллере всегда «не определен», это было бы очень полезно.


person user1286856    schedule 01.09.2017    source источник
comment
Я думаю, что есть ошибка в коде API. .then(makeRequest({operation, parameters, API_KEY})); должно быть .then(return makeRequest({operation,parameters,API_KEY}));   -  person Maria Ines Parnisari    schedule 02.09.2017


Ответы (1)


Спасибо @Maria Ines Parnisari, вы указали мне правильное направление, и я решил эту проблему. Похоже проблема в API. Я исправил, добавив функцию в .then, так как простой возврат makeRequest дает ошибку.

        return verifyParameters(operation, parameters)
        .then(function () {
          return makeRequest({
            operation,
            parameters,
            API_KEY
        })});
person user1286856    schedule 02.09.2017