Hướng dẫn does javascript have a wait function? - javascript có chức năng chờ không?

Hướng dẫn does javascript have a wait function? - javascript có chức năng chờ không?

JavaScript không cung cấp bất kỳ hàm gốc nào như Wait () cho các sự kiện thời gian. Khi nói đến các sự kiện thời gian trong JavaScript, có những chức năng sau đây mà bạn có thể sử dụng trong dự án của mình.

  1. setTimeout()
  2. clearInterval()
  3. setInterval()

Nhiều ngôn ngữ lập trình có chức năng giấc ngủ sẽ chờ thực hiện chương trình trong một số giây nhất định. Nhưng JavaScript không có chức năng gốc đó.

JavaScript setTimeout ()

SetTimeout () là hàm JavaScript tích hợp gọi hàm hoặc đánh giá biểu thức sau một số mili giây được chỉ định. & NBSP; Thật không may, SETTIMEOUT () độc lập không hoạt động như bạn mong đợi, dựa trên cách bạn sử dụng nó. Bạn có thể đã thử nó tại một số điểm trong vòng lặp JavaScript và thấy rằng hàm setTimeout () dường như hoàn toàn không hoạt động.setTimeout() is a built-in JavaScript function that calls a function or evaluates an expression after a specified number of milliseconds. Unfortunately, standalone setTimeout() does not work quite as you might expect, based on how you use it. You may have already tried it at some point in the JavaScript loop and seen that the setTimeout() function does not seem to work at all.

Vấn đề phát sinh từ sự hiểu lầm setTimeout () như là một hàm ngủ () của các ngôn ngữ khác khi nó hoạt động theo bộ quy tắc của chính nó.

Hãy cùng xem mã sau.

// app.js

for (let i = 1; i <= 5; i++) {
  setTimeout(() => console.log(`#${i}`), 1000);
}

Trong mã trên, chúng tôi đang cố gắng đạt được rằng chúng tôi muốn ghi lại giá trị i cứ sau 1 giây cho đến khi điều kiện vòng lặp là sai.

Nhưng khi bạn chạy mã, điều đó đã xảy ra. Thay vào đó, việc thực thi sẽ tạm dừng trong 1 giây và sau đó in 5 giá trị cùng một lúc.

Chà, đó không phải là những gì được cho là sẽ xảy ra. Chúng ta cần đăng nhập các giá trị cứ sau 1 giây và không chỉ chờ 1 giây và ghi lại tất cả các giá trị cùng một lúc.

Vâng, đó là cách JavaScript hoạt động. Nó hoạt động theo các quy tắc riêng của nó. Vì vậy, ví dụ, setTimeout (1000) không hoạt động như chờ 1 giây giữa hàm của bạn đến hàm console.log ().

Xem đầu ra.

 node app
#1
#2
#3
#4
#5

Điều này dẫn đến tất cả năm tin nhắn nhật ký console được hiển thị cùng nhau, sau khi trì hoãn & nbsp; 1 giây, thay vì hiệu ứng mong muốn của độ trễ 1 giây giữa mỗi cuộc gọi lặp lại.

Điều này là do hàm setTimeout () được thực thi dưới dạng mã đồng bộ và nhiều lệnh gọi vào setTimeout () đều chạy đồng thời. Do đó, mỗi cuộc gọi đến setTimeout () tạo một mã không đồng bộ sẽ thực thi sau, sau một độ trễ nhất định. Vì mỗi độ trễ trong đoạn mã là giống nhau (1000ms hoặc 1 giây), tất cả các mã được xếp hàng chạy đồng thời, sau khi trì hoãn duy nhất là 1 giây.

Như đã thảo luận, setTimeout () không phải là hàm ngủ (); Thay vào đó, nó chỉ xếp hàng mã không đồng bộ để thực hiện sau này.

Nhưng may mắn thay, có thể sử dụng setTimeout () để tạo hàm ngủ () của riêng bạn trong javascript.

Để làm cho mã JavaScript của bạn chờ đợi, hãy sử dụng kết hợp các lời hứa, async/chờ đợi và hàm setTimeout () thông qua đó bạn có thể viết chức năng chờ sẽ hoạt động như bạn mong đợi. Tuy nhiên, bạn chỉ có thể gọi hàm Wait () tùy chỉnh này từ bên trong các hàm Async và bạn cần sử dụng từ khóa đang chờ đợi với nó.JavaScript code wait, use the combination of Promises, async/await, and setTimeout() function through which you can write the wait function that will work as you would expect it. However, you can only call this custom wait() function from within async functions, and you need to use the await keyword with it.

Chờ () Ví dụ trong JavaScript

Tạo một tệp mới có tên & nbsp; app.js & nbsp; và viết mã sau bên trong tệp đó.app.js and write the following code inside that file.

// app.js

const list = [1, 2, 3, 4]
const task = async () => {
  for (const item of list) {
    await new Promise(r => setTimeout(r, 1000));
    console.log('Yello, D\'oh');
  }
}

task();

Đầu ra

node app
Yello, D'oh
Yello, D'oh
Yello, D'oh
Yello, D'oh

Ở đây, chúng tôi sử dụng điều này chỉ là một dòng mã sẽ chờ chúng tôi.

await new Promise(r => setTimeout(r, 1000));

Mã này hoạt động chính xác như bạn có thể mong đợi vì đang chờ đợi việc thực thi đồng bộ mã sẽ tạm dừng cho đến khi lời hứa được giải quyết.

Sự kết luận

JavaScript có thể không có chức năng ngủ hoặc chờ, nhưng thật dễ dàng để tạo hàm hoặc viết một dòng mã bằng cách sử dụng hàm setTimeOut () sẵn có miễn là bạn rất cẩn thận về mã và cách bạn sử dụng.

Bản thân nó, hàm setTimeout () không hoạt động như phương thức ngủ (), nhưng bạn có thể tạo hàm javascript () hoặc chờ () tùy chỉnh Sleep Sleep () hoặc Wait () sử dụng Async và đang chờ.

Đó là nó cho hướng dẫn này.

Bài viết liên quan

Thời gian JavaScript

JavaScript ngủ

Làm thế nào để bạn chờ đợi trong mã JavaScript?

Hai phương pháp chính để sử dụng với JavaScript là:..
SetTimeout (hàm, mili giây) thực hiện một hàm, sau khi chờ một số mili giây được chỉ định ..
setInterval (hàm, mili giây) giống như setTimeout (), nhưng lặp lại việc thực thi hàm liên tục ..

Làm thế nào để bạn đợi 1 giây trong JavaScript?

Để trì hoãn việc thực hiện chức năng trong JavaScript 1 giây, hãy kết thúc việc thực hiện hứa hẹn bên trong một hàm và bọc giải quyết của Promise () trong một setTimeout () như được hiển thị bên dưới.setTimeout () chấp nhận thời gian tính bằng mili giây, do đó setTimeout (FN, 1000) bảo JavaScript gọi FN sau 1 giây.wrap a promise execution inside a function and wrap the Promise's resolve() in a setTimeout() as shown below. setTimeout() accepts time in milliseconds, so setTimeout(fn, 1000) tells JavaScript to call fn after 1 second.

JavaScript có chờ phản hồi không?

Thực thi mã JavaScript không đồng bộ theo mặc định, điều đó có nghĩa là JavaScript sẽ không chờ đợi một hàm kết thúc trước khi thực thi mã bên dưới nó.JavaScript won't wait for a function to finish before executing the code below it.

Tại sao JavaScript không có chức năng ngủ?

Nhìn chung có hai lý do: 1) Bạn đang chờ đợi một cái gì đó khác để hoàn thành, hoặc 2) bạn muốn kiểm soát thời gian (một vòng lặp trò chơi hoặc một cái gì đó).Trong trường hợp đầu tiên, nếu bạn chặn luồng UI thì bạn thậm chí sẽ không biết liệu điều khác có kết thúc hay không, vì nó sẽ phải chạy trên luồng UI, bị chặn.you're waiting for something else to finish, or 2) you want to control timing (a game loop or something). In the first case, if you block the UI thread then you won't even know if the other thing finished, since it will have to run on the UI thread, which is blocked.