За разлика от други езици за програмиране, JavaScript няма вграден метод за заспиване. Така че не можете просто да извикате функция sleep(), за да поставите на пауза програма Node.js. Има обаче и други начини, по които можете да накарате програмата да изчака определено време.

Този урок обсъжда три подхода: setTimeout, async/await и пакетът sleep-promise.

Използване на setTimeout() за изчакване на определено време

В setTimeout() функцията насрочва изпълнение на кода за времето за изпълнение, след като изтече определен период от време. Той приема функция и време на забавяне в милисекунди. Ето синтаксиса:

setTimeout(функция(), timeInMs)

Например, да речем, че имате функция, която отпечатва на конзолата:

функцияprintSentence() {
console.log("Използване на setTimeout()")
}

За да стартирате горната функция след изтичане на две секунди, предайте функцията и времето на забавяне от 2000 мс на setTimeout() функция:

setTimeout (printSentence, 2000)

Въпреки че това работи, не е гарантирано, че функцията ви ще работи точно след две секунди. Определено ще отнеме поне толкова време, но може да отнеме повече.

instagram viewer

SetTimeout() Точен ли е?

Да, но с някои уговорки. setTimeout() е асинхронна JavaScript функция което означава, че не блокира. Кодът, който планирате, се добавя към цикъла на събитията, докато останалата част от вашата програма продължава.

След изтичане на времето за забавяне вашата програма ще изпълни планирания код, но само когато е свободна да го направи. Ако друг код е в стека от повиквания, той ще се изпълни първи, дори ако планираният код трябва да се изпълни. Тук може да възникне допълнително време за забавяне, оттук и неточността.

Помислете за следната програма.

console.log("Здравей свят!")

функцияprintSentence() {
console.log("Използване на setTimeout()")
}

setTimeout (printSentence, 2000)
console.log("Свършен")

Ето какво ще покаже конзолата, когато я стартирате:

Здравей свят!
Свършен
Използване на setTimeout()

Тази програма въвежда забавяне, но забавя само кода, към който преминава setTimeout(). Останалата част от програмата продължава, като планираният код я прекъсва само след като продължителността изтече. Ако искате да изпълните целия този код в ред, с пауза в средата, използвайте setTimeout() няма да работи.

Една алтернатива е да напишете синхронен код, който ще блокира изпълнението толкова дълго, колкото ви е необходимо. Например, можете да използвате a направи... докато цикъл, за да блокирате нишката за изпълнение, докато изтече времето за забавяне:

функциязабавяне(г-ца) {
const дата = Дата.сега();
позволявам текуща дата = нула;

направи {
текуща дата = Дата.сега();
} докато (currentDate - дата < ms);
}

console.log("Здравей свят");
забавяне (2000 г.);
console.log("Ще бъде отпечатано след 2 секунди!");

В забавяне() функцията се повтаря, докато текущото време стане равно или по-голямо от началното му време плюс закъснението. Недостатъкът на този подход е, че е процесорно интензивен, особено при големи закъснения. В do...while цикъл трябва да изчисли оставащото време след всяка милисекунда.

Използване на Async/Await за отлагане на програма Node.js

Ан чакам израз кара изпълнението да се постави на пауза, докато обещанието не бъде разрешено. Позволява ви да изпълнявате асинхронен код, сякаш е синхронен, но по-ефективно, отколкото чрез ръчно блокиране на изпълнението. Можете да използвате само await вътре в маркирана функция асинхронно.

функциязабавяне(време) {
връщаненовОбещай(resolve => setTimeout (решаване, време));
}

асинхроннофункцияprintSentence() {
console.log("Здравей свят")
чакам забавяне (2000);
console.log("Ще се отпечата след 2 секунди");
}

printSentence();

Това е резултатът от горната програма:

Здравей свят
Ще се отпечата след 2 секунди

Използване на пакета за сън-обещание

В сън-обещание пакет опростява процеса на пауза на програмите Node.js. Трябва само да го извикате и да посочите времето за забавяне в милисекунди.

Започнете, като го инсталирате чрез npm:

npm Инсталирайсън-обещавам

Ето пример за това как можете да го използвате във вашата програма:

const сън = изискват('обещание за сън');

(асинхронно () => {
console.log("Здравей свят.");
чакам сън (2000);
console.log("Ще бъде отпечатано след две секунди.");
})();

Когато стартирате програмата, изходът ще бъде както следва.

Здравей свят.
Ще бъде отпечатано след две секунди.

Избор на подходящ подход

Внедряването на функция за заспиване в Node.js може да бъде трудно. Когато решавате как да го направите, помислете какво искате да постигнете. Ако просто искате да забавите някакъв код, за минимален период от време, setTimeout() е добър вариант. Но ако искате да поставите на пауза изпълнението на цялата си програма, трябва да използвате async/await.

Синхронно срещу Асинхронно програмиране: Как се различават?

Прочетете Следващото

ДялтуитДялелектронна поща

Свързани теми

  • Програмиране
  • Уеб разработка
  • Програмиране
  • JavaScript

За автора

Мери Гатони (публикувани 19 статии)

Мери Гатони е разработчик на софтуер със страст за създаване на техническо съдържание, което е не само информативно, но и ангажиращо. Когато не кодира или пише, тя обича да излиза с приятели и да е на открито.

Още от Mary Gathoni

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, ревюта, безплатни електронни книги и ексклузивни оферти!

Щракнете тук, за да се абонирате