没有调用亚马逊Alexa HTTP回调?

时间:2017-11-08 23:11:20

标签: javascript node.js aws-lambda axios alexa-skills-kit

我有一个Alexa技能,可以获取设备的地址并使用该信息查找附近的设施。根据此解决方案here,这是由于Javascript的异步性。

上述链接问题中提出的解决方案是使用回调将http调用拉入其自己的函数中。我已经这样做了(见下面的代码),但http请求仍未返回。

我还看了@ jfriend00提出的解决方案here。我的回调结构相同。我仍然不明白为什么我的回调在其余代码运行之前没有返回。

getKaiserBuildingHandler()



const getKaiserBuildingHandler = function() {
    console.info("Starting getKaiserBuildingHandler()");
    
    ...

      switch(addressResponse.statusCode) {
          case 200:
              console.log("Address successfully retrieved, now responding to user.");

              ...

              const nearestKPFacility = getKaiserBuildingHelper(buildingType, address);
              
              ...

              break;
          
          ...
      }

      console.info("Ending getKaiserBuildingHandler()");
    });

    ...
};




getKaiserBuildingHelper()



const getKaiserBuildingHelper = function(buildingType, address) {
  console.info("Starting getKaiserBuildingHelper()");

  // var facilityOutput = Messages.ERROR;
  var facilityOutput = "Inside building helper function, initial value.";

  if (buildingType == BLDG_TYPE.PHARMACY ||
      buildingType == BLDG_TYPE.CLINIC ||
      buildingType == BLDG_TYPE.HOSPITAL) {

    ...
    
    facilityOutput = "Before get JSON call.";

    getJSON(buildingType, function(err, data) {
      if (data != "ERROR") {
        console.info("Received data from callback: ", data);
        facilityOutput = "The closest Kaiser Permanente " + buildingType + " to your location is located at " + data + ".";
      } else {
        console.error("Error with data received from callback. ", err);
        facilityOutput = "Entered JSON call, returned ERROR.";
      }
    });
  }

  ...

  return facilityOutput;

  console.info("Ending getKaiserBuildingHelper()");
}




的getJSON()



const getJSON = function(building, callback) {
  console.info("Starting getJSON()");

  Axios
    .get(getFacilitySearchEndpoint(building))
    .then(function(response) {
      callback(null, response);
    })
    .catch(function(error) {
      callback(error, "ERROR");
    });

  console.info("Ending getJSON()");
}




getFacilitySearchEndpoint()[维基百科api就像占位符一样]



const getFacilitySearchEndpoint = function(building) {
  console.info("Starting getFacilitySearchEndpoint()");

  switch (building) {
    case BLDG_TYPE.HOSPITAL:
      console.info("Ending getFacilitySearchEndpoint() with " + building);
      return "https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&utf8=1&srsearch=Albert+Einstein";
      break;
    case BLDG_TYPE.PHARMACY:
      console.info("Ending getFacilitySearchEndpoint() with " + building);
      return "https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&utf8=1&srsearch=Harry+Potter";
      break;
    case BLDG_TYPE.CLINIC:
      console.info("Ending getFacilitySearchEndpoint() with " + building);
      return "https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&utf8=1&srsearch=Tony+Stark";
      break;
    default:
      console.info("Ending getFacilitySearchEndpoint() with default");
      break;
  }
  console.info("Ending getFacilitySearchEndpoint()");
}




0 个答案:

没有答案