Size: a a a

Node.js — русскоговорящее сообщество

2019 November 18

JD

John Doe in Node.js — русскоговорящее сообщество
Anton Cherkasov
По консоли все работает - забирает текст и возвращает его
return userAnswer ?
источник

AC

Anton Cherkasov in Node.js — русскоговорящее сообщество
John Doe
return userAnswer ?
да
источник

JD

John Doe in Node.js — русскоговорящее сообщество
а зачем возвращать, если это нигде не используется?
источник

JD

John Doe in Node.js — русскоговорящее сообщество
или я не понял что-то
источник

AC

Anton Cherkasov in Node.js — русскоговорящее сообщество
Anton Cherkasov
Всем привет!
Люди добрые, помогите пжлст разобраться с ботом. Мучаюсь уже несколько недель (( Делаю бота для опросов на ноде, где вопросы надо отправлять поочередно:
- отправил 1ый вопрос -> получил ответ -> отправил 2ой вопрос -> получил ответ -> отправил следующий вопрос и тд.

Вот не получается получить ответ от юзера… Отправляю первый вопрос, пишу ответ, а забрать его не удается. По факту кол-во вопросов может быть разным, поэтому вопросы отправляю в цикле. Получается, что надо дождаться ответ от юзера в цикле и только после этого переходить на следующую итерацию.

Использую промис, чтобы дождаться ответа. Посмотрите пжлст - правильно это вообще? Как отправить вопрос в цикле + дождаться ответа и только после переключать итерацию?

for (let i = 0; i < questions.length; i++) {
     return new Promise(function(resolve, reject) {
       slackBot.sendMessage(questions[i], user_id, (res, err) => { // здесь отправляется пока только 1ый вопрос
         if (err) {
           return reject(err);
         }
         console.log(`res in api`, res);  // до сюда не доходит
         let answerField = {
           text: res,
           questionID: questions[i]._id
         };

         newAnswer.answers.push(answerField);
         resolve(res);
       });
     });
}
Вот сюда я хочу вернуть, там внизу есть код
источник

AC

Anton Cherkasov in Node.js — русскоговорящее сообщество
там цикл, в котором вызывается sendMessage, в котором и находится checkAnswers, где возвращается userAnswer
источник

AC

Anton Cherkasov in Node.js — русскоговорящее сообщество
цикл состоит из массива вопросов. В идеале, надо отправить один вопрос, дождаться ответа из sendMessage/checkAnswers и задать следующий вопрос
источник

JD

John Doe in Node.js — русскоговорящее сообщество
Anton Cherkasov
там цикл, в котором вызывается sendMessage, в котором и находится checkAnswers, где возвращается userAnswer
Я кажется понял твою проблему. Ты не знаешь как работает асинхронный код и в частности промисы. В интернете полно объяснений, почитай.

Просто у тебя вопрос по основам javascript, а не по Node.js
источник

AC

Anton Cherkasov in Node.js — русскоговорящее сообщество
ок, спс
источник

r🧬

rmshell 🧬 in Node.js — русскоговорящее сообщество
Anton Cherkasov
Всем привет!
Люди добрые, помогите пжлст разобраться с ботом. Мучаюсь уже несколько недель (( Делаю бота для опросов на ноде, где вопросы надо отправлять поочередно:
- отправил 1ый вопрос -> получил ответ -> отправил 2ой вопрос -> получил ответ -> отправил следующий вопрос и тд.

Вот не получается получить ответ от юзера… Отправляю первый вопрос, пишу ответ, а забрать его не удается. По факту кол-во вопросов может быть разным, поэтому вопросы отправляю в цикле. Получается, что надо дождаться ответ от юзера в цикле и только после этого переходить на следующую итерацию.

Использую промис, чтобы дождаться ответа. Посмотрите пжлст - правильно это вообще? Как отправить вопрос в цикле + дождаться ответа и только после переключать итерацию?

for (let i = 0; i < questions.length; i++) {
     return new Promise(function(resolve, reject) {
       slackBot.sendMessage(questions[i], user_id, (res, err) => { // здесь отправляется пока только 1ый вопрос
         if (err) {
           return reject(err);
         }
         console.log(`res in api`, res);  // до сюда не доходит
         let answerField = {
           text: res,
           questionID: questions[i]._id
         };

         newAnswer.answers.push(answerField);
         resolve(res);
       });
     });
}
Может просто при старте отправлять первый элемент из массива, потом по хуку получить юзера, ответ на вопрос номер Х, отправить вопрос X++; тут так то и цикл не нужен
источник

AC

Anton Cherkasov in Node.js — русскоговорящее сообщество
а что ты имееь в виду под “потом по хуку получить юзера”? получить его ответы?
источник

Б

Богдан in Node.js — русскоговорящее сообщество
Господа, а не подскажите по стримах?
Почему-то появляется ошибка, когда пайплю на врайтабл стрим
источник

r🧬

rmshell 🧬 in Node.js — русскоговорящее сообщество
Anton Cherkasov
а что ты имееь в виду под “потом по хуку получить юзера”? получить его ответы?
Ну ентрипоинт куда клиент может данные сбросить
источник

r🧬

rmshell 🧬 in Node.js — русскоговорящее сообщество
У тебя телеги или чего?
источник

AC

Anton Cherkasov in Node.js — русскоговорящее сообщество
rmshell 🧬
У тебя телеги или чего?
slack
источник

r🧬

rmshell 🧬 in Node.js — русскоговорящее сообщество
Ну он точно умеет в хук )
источник

r🧬

rmshell 🧬 in Node.js — русскоговорящее сообщество
Богдан
Господа, а не подскажите по стримах?
Почему-то появляется ошибка, когда пайплю на врайтабл стрим
Ну он же хочет в аргумент function
источник

AC

Anton Cherkasov in Node.js — русскоговорящее сообщество
rmshell 🧬
Ну он точно умеет в хук )
incoming webhooks - есть такое
источник

Б

Богдан in Node.js — русскоговорящее сообщество
rmshell 🧬
Ну он же хочет в аргумент function
непонятно какую функцию хочет
источник

r🧬

rmshell 🧬 in Node.js — русскоговорящее сообщество
Anton Cherkasov
incoming webhooks - есть такое
Ну вот там задай путь к боту, куда слак будет отвечать боту
источник