Событие при щелчке везде на странице за пределами определенного отделения

Здесь я попытался немного очистить код, чтобы его было легче читать. Как уже говорили другие, вам нужно определить обещание. В частности, вам нужно написать функцию, которая ВОЗВРАЩАЕТ a promise. Если функция возвращает promise, вы можете использовать .then.

Помните, что вам также необходимо определить, к чему promise приводит разрешение в успешном случае и в случае ошибки, или в случае отклонения.

Обещания MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

У меня не так много контекст, так что мне немного неясно, что вы будете resolve и что вы будете reject выполнять в своей checkFile функции, но я постараюсь ниже дать предложение о том, как вы можете заставить его работать.

if (condition) {
    try {
        if (fs.existsSync(path)) {
            playaudio();
        } else {
            checkfile().then(function(){
                playaudio();
            });
        }
    } catch (err) {
        console.log(err);
    }
}


function checkfile () {
    try {
        if (!fs.existsSync(path)) {
            var file = fs.createWriteStream("ring.wav");
            var request = http.get("http://mp3.com/ring.wav", function(response){
                response.pipe(file);
            });
        }
    } catch(err) {
          console.error(err)
    }
}

function playaudio() {
    player.play('ring.wav', function(err){
        if (err) throw err
    })
}

Общий пример функции, которая возвращает обещание и его использование:

const somePromiseReturningFunction = function(someParameter) {
    return new Promise(function(resolve, reject) {
        if (someParameter === 'someDesiredString') {
            resolve('Success!');
        } else {
            reject('Error!');
        }
    });
};

somePromiseReturningFunction('someDesiredString')
    .then(function(resolvedValue) {
        console.log(resolvedValue) // prints 'Success!'
    })
    .catch(function(error) {
        console.log(error) // prints 'Error!'
    });

checkFile переписан для возврата обещания:

function checkfile () {
    return new Promise(function(resolve, reject) {
        try {
            if (!fs.existsSync(path)) {
                var file = fs.createWriteStream("ring.wav");
                var request = http.get("http://mp3.com/ring.wav", function(response){
                    response.pipe(file);
                    resolve();
                });
            }
        } catch(err) {
              reject(err)
        }
    });
}

10
задан sumek 26 November 2008 в 16:06
поделиться

4 ответа

Присоедините событие щелчка к документу для сокрытия отделения:

$(document).click(function(e) {
   $('#somediv').hide();
});

Присоедините событие щелчка к отделению для остановки, нажимает на него от распространения до документа:

$('#somediv').click(function(e) {
   e.stopPropagation();
});
30
ответ дан 3 December 2019 в 14:44
поделиться

Первая идея, в необработанном JavaScript (из этого сообщения):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <meta http-equiv="Content-Script-Type" content="text/javascript">
    <style type="text/css">
      <!--
      #mydiv{
        background-color: #999999;
        height: 100px;
        width: 100px;
      }
      -->
    </style>
    <script type="text/javascript">
      document.onclick=check;
      function check(e)
      {
        var target = (e && e.target) || (event && event.srcElement);
        var obj = document.getElementById('mydiv');
        if(target!=obj){obj.style.display='none'}
      }
    </script>
  </head>
  <body>
    <div id="mydiv">my div</div>
  </body>
</html> 

Протестированный с IE6 и FireFox3.1, это действительно работает, как рекламируется.

2
ответ дан 3 December 2019 в 14:44
поделиться

Это уверенный кажется на желание модального диалогового окна. Этот плагин jQuery http://code.google.com/p/simplemodal/ похож на него, имеет потенциал.

0
ответ дан 3 December 2019 в 14:44
поделиться

Если у отделения есть фокус, Вы могли бы присоединить к onblur событию.

0
ответ дан 3 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: