Таким образом, это код для yelp-fusion node.js API, используемый в диалоговом окне v2.
Проблема: agent.add(response.jsonBody.businesses[0].name);
который должен заставить бота сказать, что имя бизнеса фактически не работает, даже несмотря на то, что код существует.
Из исследований в других ответах говорилось о необходимости использования жира arrow => в этих обещаниях javascript.
Однако он уже используется. Код внутри.then() не работает, за исключением console.log, который запускается.
Может ли кто-нибудь советовать, что я могу сделать, чтобы запускать методы внутри javascript-обещаний? Или другие альтернативы? Очень признателен. Спасибо!
клиентом ниже является клиент API yelp.
agent - это webhookclient в диалоговом потоке. agent.add() работает, когда выполняется вне этого кода ниже.
client.search({
term:'Four Barrel Coffee',
location: 'san francisco, ca'
}).then(response => {
//res = response.jsonBody.businesses[0].name; //*not assigned!
console.log(response.jsonBody.businesses[0].name);
agent.add(response.jsonBody.businesses[0].name); //*nothing!
}).catch(e => {
console.log(e);
});
У вас есть половина решения. Это не столько использование жирной стрелки, а то, что вы имеете дело с асинхронными функциями (вызов client.search
), и что при использовании асинхронных функций с библиотекой выполнения диалогов необходимо использовать Promises.
В частности - вам нужно вернуть Promise, чтобы вызывающая функция узнала, что ей нужно дождаться завершения всех предложений then()
, чтобы отправить ответ.
Вы не показываете всю свою функцию, но вы, вероятно, можете сделать это, добавив несколько операторов return
. Возможно, что-то вроде этого:
return client.search({
term:'Four Barrel Coffee',
location: 'san francisco, ca'
}).then(response => {
return agent.add(response.jsonBody.businesses[0].name);
}).catch(e => {
console.log(e);
return Promise.reject( e );
});
client.search()
.
then()
который получает в response
результат client.search()
. Они используют response
при вызове agent.add()
. Они сказали, что console.log()
работает, что говорит о том, что agent.add()
не работает. agent.add()
является частью библиотеки Dialogflow и возвращает результаты пользователю, но полагается на возвращение Promise, если задействованы асинхронные функции. Я не знаю client.search()
, но похоже, что она асинхронная. Нет никаких доказательств того, что Promise возвращается в образце кода OP.