2017-09-01 86 views
0

我正在爲nodejs(joshbalfour/node-cognitive-services)使用Microsoft Cognitive Services api。根據文檔示例,我遵循了代碼。但是我發現響應總是'未定義'。認知服務makeRequest總是返回undefined

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

這是從repo調用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調用工作正常,但返回的值不是。如果有人能夠解釋爲什麼我的控制器中的響應總是'未定義',這將是非常有用的。

+0

我認爲在api代碼中存在一個錯誤。 '.then(makeRequest({operation,parameters,API_KEY}));'should be'.then(return makeRequest({operation,parameters,API_KEY}));' –

回答

1

謝謝@Maria Ines Parnisari你指出我正確的方向,我解決了它。看起來問題在於API。我通過添加一個函數來解決這個問題。然後就像返回makeRequest給出一個錯誤一樣。

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