我正在编写一个小项目,以使用node-fetch从DynamoDB中获取数据,然后稍后使用Dialogflow将数据呈现给用户。下面是我的代码示例,由于正在获取所需的数据,因此目前正在运行。
function getstock(agent) {
const product = agent.parameters.product;
const prodid = parseInt(product, 10);
var url = 'link';
var data = {
"prodid": prodid
};
fetch(url, {
method: 'POST',
body:JSON.stringify(data),
headers: {
'Content-Type': 'application/json'
}
}).then((resp) => {
resp.json();
}).then((data) => {
console.log(data);
});
}
但是我很难将数据分配到变量中,这样我可以使用agent.add('blah blah ${variable_name}')
。我已经阅读了几篇文章,并且我相信问题在于我没有使用async / await函数。但是,我对这种东西还比较陌生,任何帮助将不胜感激。
已编辑
我已经更新了上面的代码以使用异步/等待
async function getstock(agent) {
const product = agent.parameters.product;
const prodid = parseInt(product, 10);
var url = 'link';
var data = {
"prodid": prodid
};
const response = await fetch(url, {
method: 'POST',
body:JSON.stringify(data),
headers: {
'Content-Type': 'application/json'
}
});
const jsondata = await response.json();
return jsondata;
}
getstock(agent)
.then(response => {
let prodStock = response.Item.stock;
let prodName = response.Item.product;
console.log("the data is" + prodStock);
agent.add(`The ${prodName} stock is ${prodStock}`);
}).catch(err => {
console.log('error');
});
上面的代码现在正在执行我期望的操作,即获取数据,然后将数据存储到变量中,以便在将其存储到变量中时可以像以前那样将其呈现给用户说“未定义”,这可能是因为我没有使用异步/等待。无论如何,我还有什么可以改善此代码/整理吗?