Имя: Пароль:
IT
 
nodejs прочитать из консоли внутри promice?
0 Fragster
 
гуру
06.02.17
21:40
линейный код выглядит так:

соединились с сервером
отправили запрос
/// тут на телефон приходит код
прочитали код из командной строки
отправили еще один запрос


завернул первую часть в промис, получилось типа
regPhone = require('./regPhone');
regPhone.sendCode(phoneNumber, server).then(
    (result) => {
        console.log(result);
        // а вот тут надо прочитать с stdin код
        regPhone.getKey();
    });


проблема в том, что все мануалы на чтение stdin выглядят примерно так:
process.stdin.setEncoding('utf8');
process.stdin.on('readable', () => {
    var data = process.stdin.read();
    if (data === null) { return; };
    data = data.trim();
    
    ....

});  

как это впихнуть внутрь обработчика промиса - непонятно. наверное надо превратить в еще один промис, только как?
1 Asmody
 
06.02.17
22:28
вот это не подойдёт https://www.npmjs.com/package/all-promise
2 Asmody
 
06.02.17
22:29
?
3 Fragster
 
гуру
06.02.17
22:38
нет, но у ноды есть замечательный readline
4 Fragster
 
гуру
06.02.17
22:40
const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('What do you think of Node.js? ', (answer) => {
  // TODO: Log the answer in a database
  console.log(Thank you for your valuable feedback: ${answer});

  rl.close();
});

и чентральная часть замечательно запихивается в промис
5 Asmody
 
06.02.17
22:46
const stdinRead = ()=>{
new Promise((resolve, reject)=>{
  process.stdin.setEncoding('utf-8')
  process.stdin.on('readable', () => {
    let data = process.stdin.read()
    if (data === null) reject(new Error(...))
    resolve(data.trim())
  }
}
}

и потом где надо
stdinRead().then((data)=>{...}).catch((err)=>{...})
6 Asmody
 
06.02.17
22:52
return пропустил перед new
7 eks1985
 
06.02.17
22:52
new Promise((resolve, reject)=>{  тут return забыл
8 eks1985
 
06.02.17
22:53
(6) =)
9 Asmody
 
06.02.17
22:54
на планшете неудобно код писать
10 Fragster
 
гуру
06.02.17
23:24
есть реализация telegram api на ноде.жс, более полная, чем telegram.link?
11 Fragster
 
гуру
06.02.17
23:24
не боты, а полноценные клиенты
12 Fragster
 
гуру
09.02.17
23:32
не пойму, в чем косяк:

вот так в callback попадает параметр

function getKey(code) {
    return new Promise(function(callback, reject) {
        client.auth.signIn(code, callback);
    });
};

а вот так  нет:

function getKey(code) {
    return new Promise(function(callback, reject) {
        client.auth.signIn(code, (result)=>{callback(result)});
    });
};

не пойму, что делаю не так. Вызов происходит так:
getCode(code).then((res)=>{
  console.log(res);
})