Узел странного пользовательского ввода асинхронного поведения - PullRequest
0 голосов
/ 16 декабря 2018

Я только привыкаю к ​​программированию Node, но я столкнулся с этой проблемой выполнения, в которой я немного запутался.

Я пытаюсь проверить, существует ли путь записи, и если он существует, то запросить ввод у пользователя.

function testPath(fileName) {
  fs.exists(path.resolve('.', fileName), function(exists) {
  //the filepath already exists, ask for user confirmation
  if(exists) {
    process.stdin.on('keypress', function (str, key) {
    //print result of keypress to console
    console.log("str: ", str, " key: ", key);

    if ((str.toLowerCase() == "n") || (~["y", "n"].indexOf(str.toLowerCase()))) {
      return false;
    }
    else {
      return true;
    }
  });
  }
  else {
  //the filepath does not already exist - return true
  return true;
}
console.log("Filename in the target directory already exists, would you like to overwrite? (y/n)");
});
}

Эта функция в целом будет разрешена (или нет) с помощью вызова, вызванного для нее.

Сообщение пользователю и ожидание нажатия клавиши, кажется, действуют правильноно он зацикливается и никогда не возвращается даже при действительном нажатии клавиши, кто-нибудь знает, почему это будет?

1 Ответ

0 голосов
/ 16 декабря 2018

Если вы хотите использовать его как обещание, вам нужно вернуть обещание:

function testPath(fileName) {
    return new Promise((resolve, reject) => {
        fs.exists(path.resolve('.', fileName), function(exists) {
        //the filepath already exists, ask for user confirmation
        if(exists) {
            process.stdin.on('keypress', function (str, key) {
            //print result of keypress to console
            console.log("str: ", str, " key: ", key);

            if ((str.toLowerCase() == "n") || (~["y", "n"].indexOf(str.toLowerCase()))) {
            return reject();
            }
            else {
            return resolve();
            }
        });
        }
        else {
        //the filepath does not already exist - return true
        return resolve();
        }
        console.log("Filename in the target directory already exists, would you like to overwrite? (y/n)");
        });
        }
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...