Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

Chức năng này dưới đây không làm việc như tôi muốn nó; Trở thành một người mới của JS, tôi có thể tìm ra lý do tại sao.

Show

Tôi cần nó chờ 5 giây trước khi kiểm tra xem

const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};
5 có phải là
const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};
6 không.

Hiện tại, nó không chờ đợi, nó chỉ kiểm tra ngay lập tức.

function stateChange(newState) {
  setTimeout('', 5000);

  if(newState == -1) {
    alert('VIDEO HAS STOPPED');
  }
}

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

hỏi ngày 9 tháng 1 năm 2013 lúc 1:11Jan 9, 2013 at 1:11

1

Trình duyệt

Đây là một giải pháp sử dụng cú pháp Async/Await mới.

Hãy chắc chắn kiểm tra hỗ trợ trình duyệt vì đây là một tính năng ngôn ngữ được giới thiệu với Ecmascript 6.

Chức năng tiện ích:

const delay = ms => new Promise(res => setTimeout(res, ms));

Usage:

const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};

Ưu điểm của phương pháp này là nó làm cho mã của bạn trông và hoạt động như mã đồng bộ.

Node.js

Node.js 16 cung cấp phiên bản tích hợp của

const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};
7 dựa trên lời hứa nên chúng tôi không phải tạo chức năng tiện ích của riêng mình:

import { setTimeout } from "timers/promises";

const yourFunction = async () => {
  await setTimeout(5000);
  console.log("Waited 5s");

  await setTimeout(5000);
  console.log("Waited an additional 5s");
};

Chỉ để ghi lại, bạn có thể bị cám dỗ sử dụng chức năng chờ để phá vỡ các điều kiện chủng tộc (khi kiểm tra mã không đồng bộ chẳng hạn). Đây hiếm khi là một ý tưởng tốt.

Đã trả lời ngày 24 tháng 11 năm 2017 lúc 21:52Nov 24, 2017 at 21:52

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

Etienne Martinetienne MartinEtienne Martin

9.1193 huy hiệu vàng32 Huy hiệu bạc47 Huy hiệu đồng3 gold badges32 silver badges47 bronze badges

6

Bạn phải đặt mã của mình vào chức năng gọi lại mà bạn cung cấp cho

const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};
7:

function stateChange(newState) {
    setTimeout(function () {
        if (newState == -1) {
            alert('VIDEO HAS STOPPED');
        }
    }, 5000);
}

Bất kỳ mã nào khác sẽ thực thi ngay lập tức.

Đã trả lời ngày 9 tháng 1 năm 2013 lúc 1:11Jan 9, 2013 at 1:11

Joseph Silberjoseph SilberJoseph Silber

210K59 Huy hiệu vàng356 Huy hiệu bạc289 Huy hiệu Đồng59 gold badges356 silver badges289 bronze badges

4

Bạn thực sự không nên làm điều này, việc sử dụng chính xác thời gian chờ là công cụ phù hợp cho vấn đề của OP và bất kỳ dịp nào khác mà bạn chỉ muốn chạy một cái gì đó sau một thời gian. Joseph Silber đã chứng minh điều đó tốt trong câu trả lời của mình. Tuy nhiên, nếu trong một số trường hợp không sản xuất, bạn thực sự muốn treo chủ đề chính trong một khoảng thời gian, điều này sẽ làm điều đó., the correct use of timeout is the right tool for the OP's problem and any other occasion where you just want to run something after a period of time. Joseph Silber has demonstrated that well in his answer. However, if in some non-production case you really want to hang the main thread for a period of time, this will do it.

function wait(ms){
   var start = new Date().getTime();
   var end = start;
   while(end < start + ms) {
     end = new Date().getTime();
  }
}

Với thực thi trong biểu mẫu:

console.log('before');
wait(7000);  //7 seconds in milliseconds
console.log('after');

Tôi đã đến đây vì tôi đang xây dựng một trường hợp thử nghiệm đơn giản để giải trình tự kết hợp các hoạt động không đồng bộ xung quanh các hoạt động chặn chạy dài (nghĩa là thao tác DOM đắt tiền) và đây là hoạt động chặn mô phỏng của tôi. Nó phù hợp với công việc đó tốt, vì vậy tôi nghĩ rằng tôi đăng nó cho bất kỳ ai khác đến đây với một trường hợp sử dụng tương tự. Mặc dù vậy, nó tạo ra một đối tượng ngày () trong một vòng lặp, điều này có thể áp đảo GC nếu nó chạy đủ lâu. Nhưng tôi không thể nhấn mạnh đủ, điều này chỉ phù hợp để thử nghiệm, để xây dựng bất kỳ chức năng thực tế nào bạn nên tham khảo câu trả lời của Joseph Silber.this is only suitable for testing, for building any actual functionality you should refer to Joseph Silber's answer.

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

Đã trả lời ngày 29 tháng 10 năm 2015 lúc 12:22Oct 29, 2015 at 12:22

MicmicMic

3.6121 Huy hiệu vàng12 Huy hiệu bạc16 Huy hiệu đồng1 gold badge12 silver badges16 bronze badges

11

Nếu bạn đang ở trong chức năng Async, bạn chỉ cần thực hiện nó trong một dòng:

console.log(1);
await new Promise(resolve => setTimeout(resolve, 3000)); // 3 sec
console.log(2);

FYI, nếu Target là NodeJS, bạn có thể sử dụng điều này nếu bạn muốn (đó là chức năng SetTimeout được xác định trước):, if target is NodeJS you can use this if you want (it's a predefined promisified setTimeout function):

await setTimeout[Object.getOwnPropertySymbols(setTimeout)[0]](3000) // 3 sec

Đã trả lời ngày 23 tháng 7 năm 2018 lúc 16:02Jul 23, 2018 at 16:02

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

ShlshlShl

2.3601 Huy hiệu vàng15 Huy hiệu bạc16 Huy hiệu đồng1 gold badge15 silver badges16 bronze badges

4

Sử dụng chức năng trì hoãn như thế này:

var delay = ( function() {
    var timer = 0;
    return function(callback, ms) {
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };
})();

Cách sử dụng:

const delay = ms => new Promise(res => setTimeout(res, ms));
0

Tín dụng: Làm thế nào để trì hoãn trình xử lý .keyup () cho đến khi người dùng ngừng nhập?

Đã trả lời ngày 27 tháng 1 năm 2015 lúc 15:06Jan 27, 2015 at 15:06

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

AvataravatarAvatar

Huy hiệu vàng 13.7k88 gold badges114 silver badges188 bronze badges

0

Bạn không nên cố gắng tạm dừng 5 giây trong JavaScript. Nó không hoạt động theo cách đó. Bạn có thể lên lịch một chức năng của mã để chạy 5 giây kể từ bây giờ, nhưng bạn phải đặt mã mà bạn muốn chạy sau này vào một hàm và phần còn lại của mã sau khi chức năng đó sẽ tiếp tục chạy ngay lập tức.

Ví dụ:

const delay = ms => new Promise(res => setTimeout(res, ms));
1

Nhưng, nếu bạn có mã như thế này:

const delay = ms => new Promise(res => setTimeout(res, ms));
2

Tuyên bố

const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};
9 sẽ chạy ngay lập tức. Nó sẽ không đợi cho đến sau khi hết thời gian chờ trong chức năng
import { setTimeout } from "timers/promises";

const yourFunction = async () => {
  await setTimeout(5000);
  console.log("Waited 5s");

  await setTimeout(5000);
  console.log("Waited an additional 5s");
};
0. Bạn không thể chỉ tạm dừng thực thi JavaScript trong một khoảng thời gian được xác định trước.

Thay vào đó, bất kỳ mã nào bạn muốn chạy chậm trễ cũng phải ở trong hàm gọi lại

import { setTimeout } from "timers/promises";

const yourFunction = async () => {
  await setTimeout(5000);
  console.log("Waited 5s");

  await setTimeout(5000);
  console.log("Waited an additional 5s");
};
1 (hoặc được gọi từ hàm đó).

Nếu bạn đã cố gắng "tạm dừng" bằng cách lặp, thì về cơ bản, bạn sẽ "treo" trình thông dịch JavaScript trong một khoảng thời gian. Bởi vì JavaScript chạy mã của bạn chỉ trong một luồng, khi bạn lặp lại, không có gì khác có thể chạy (không người xử lý sự kiện nào khác có thể được gọi). Vì vậy, vòng lặp chờ một số biến để thay đổi sẽ không bao giờ hoạt động vì không có mã nào khác có thể chạy để thay đổi biến đó.

Đã trả lời ngày 9 tháng 1 năm 2013 lúc 1:13Jan 9, 2013 at 1:13

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

jfriend00jfriend00jfriend00

660K91 Huy hiệu vàng938 Huy hiệu bạc940 Huy hiệu đồng91 gold badges938 silver badges940 bronze badges

3

Giải pháp này đến từ tài liệu của React Bản địa để kiểm soát làm mới:

const delay = ms => new Promise(res => setTimeout(res, ms));
3

Để áp dụng điều này cho câu hỏi của OP, bạn có thể sử dụng chức năng này phối hợp với

import { setTimeout } from "timers/promises";

const yourFunction = async () => {
  await setTimeout(5000);
  console.log("Waited 5s");

  await setTimeout(5000);
  console.log("Waited an additional 5s");
};
2:

const delay = ms => new Promise(res => setTimeout(res, ms));
4

Đã trả lời ngày 19 tháng 2 năm 2020 lúc 21:57Feb 19, 2020 at 21:57

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

bearacuda13bearacuda13bearacuda13

1.7293 huy hiệu vàng23 Huy hiệu bạc32 Huy hiệu đồng3 gold badges23 silver badges32 bronze badges

const delay = ms => new Promise(res => setTimeout(res, ms));
5

Điều này sẽ ẩn div '.message' sau 5 giây.

Đã trả lời ngày 30 tháng 9 năm 2020 lúc 18:47Sep 30, 2020 at 18:47

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

HackerNewbiehackernewbiehackernewbie

1.41417 Huy hiệu bạc13 Huy hiệu đồng17 silver badges13 bronze badges

1

Thử cái này:

const delay = ms => new Promise(res => setTimeout(res, ms));
6

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

Manoj Sharma

1.4672 Huy hiệu vàng13 Huy hiệu bạc20 Huy hiệu Đồng2 gold badges13 silver badges20 bronze badges

Đã trả lời ngày 3 tháng 11 năm 2015 lúc 11:51Nov 3, 2015 at 11:51

Steve Jiangsteve JiangSteve Jiang

6337 Huy hiệu bạc16 Huy hiệu Đồng7 silver badges16 bronze badges

1

Cách tốt nhất để tạo một chức năng như thế này để chờ đợi trong milli giây, chức năng này sẽ chờ mili giây được cung cấp trong đối số:

const delay = ms => new Promise(res => setTimeout(res, ms));
7

Đã trả lời ngày 2 tháng 5 năm 2015 lúc 12:20May 2, 2015 at 12:20

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

2

Dựa trên câu trả lời của Joseph Silber, tôi sẽ làm như vậy, một chút chung chung.

Bạn sẽ có chức năng của mình (hãy tạo một chức năng dựa trên câu hỏi):

const delay = ms => new Promise(res => setTimeout(res, ms));
8

Và bạn có thể có chức năng chờ:

const delay = ms => new Promise(res => setTimeout(res, ms));
9

Cuối cùng bạn sẽ có:

const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};
0

Đó là một giải pháp, tôi thà không sử dụng các đối số trong hàm chờ (chỉ có

import { setTimeout } from "timers/promises";

const yourFunction = async () => {
  await setTimeout(5000);
  console.log("Waited 5s");

  await setTimeout(5000);
  console.log("Waited an additional 5s");
};
3 thay vì
import { setTimeout } from "timers/promises";

const yourFunction = async () => {
  await setTimeout(5000);
  console.log("Waited 5s");

  await setTimeout(5000);
  console.log("Waited an additional 5s");
};
4) nhưng đó là ví dụ.

Đã trả lời ngày 13 tháng 7 năm 2017 lúc 14:25Jul 13, 2017 at 14:25

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

SylharesylhareSylhare

4.9087 Huy hiệu vàng58 Huy hiệu bạc74 Huy hiệu đồng7 gold badges58 silver badges74 bronze badges

0

Bạn có thể thêm độ trễ bằng cách thực hiện các thay đổi nhỏ cho chức năng của bạn (Async và Await).

const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};
1

Đã trả lời ngày 9 tháng 1 năm 2020 lúc 10:30Jan 9, 2020 at 10:30

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

1

Nếu bạn có chức năng Asyn, bạn có thể làm:

const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};
2

Đã trả lời ngày 16 tháng 7 lúc 8:19Jul 16 at 8:19

SUMSUMCITYSUMSUMCITYsumsumcity

1091 Huy hiệu bạc3 Huy hiệu đồng1 silver badge3 bronze badges

2

Tạo chức năng JS mới

const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};
3

Gọi chức năng khi bạn muốn trì hoãn thực thi. Sử dụng mili giây trong INT cho giá trị độ trễ.

const yourFunction = async () => {
  await delay(5000);
  console.log("Waited 5s");

  await delay(5000);
  console.log("Waited an additional 5s");
};
4

Đã trả lời ngày 22 tháng 5 năm 2018 lúc 8:15May 22, 2018 at 8:15

Hướng dẫn javascript delay 5 seconds - javascript trì hoãn 5 giây

3