【发布时间】:2020-12-17 15:03:14
【问题描述】:
我目前正在研究一项 Alexa 技能,以从 SAP 系统收集数据。因为我的函数中有一个回调来收集数据,所以 Alexa 在 speakOutput 变量更新之前会说话。
const LagerhueteIntent = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' &&
Alexa.getIntentName(handlerInput.requestEnvelope) === 'LagerhueteIntent';
},
handle(handlerInput) {
let speakOutput;
console.log("test");
findWarehouseKeepers(function(warehouseKeeper) {
console.log(warehouseKeeper);
speakOutput = "Die Lagerhüter sind die Produkte mit den Ids" + warehouseKeeper;
console.log(speakOutput);
});
return handlerInput.responseBuilder
.speak(speakOutput)
//.reprompt('add a reprompt if you want to keep the session open for the user to respond')
.getResponse();
}
};
用我的功能:
function findWarehouseKeepers(callback) {
var args = getArgs();
console.log(args);
var Client = require('node-rest-client').Client;
var client = new Client();
client.get("http://XXXXXXXX$format=json", args, function(data, response) {
let validValuesList = new List([]);
data.d.results.forEach(function(data) {
validValuesList.add(data.ProductId);
});
console.log(validValuesList);
let validValuesAsArray = validValuesList.toArray();
console.log(validValuesAsArray);
callback(validValuesAsArray);
});
}
如何使函数同步,以便在执行下一个代码之前更新 speakOutput 变量? 提前致谢。
【问题讨论】:
-
忘记尝试从仅初始化异步操作的函数返回某些内容。 IMO 在您提供给 findWarehouseKeepers 的回调函数中执行 .speak 部分。
-
handle可以返回一个响应的承诺吗? -
@Bergi:是的。我只是在研究这个。 developer.amazon.com/en-US/docs/alexa/…
标签: javascript callback synchronized