Dalam artikel ini, kita akan meneroka cara mengubah setTimeout, fungsi yang melaksanakan panggilan balik selepas kelewatan yang ditentukan, menjadi Janji yang boleh digunakan untuk mengendalikan tak segerak operasi.
JavaScript moden menyokong Janji asli yang menyediakan cara mudah untuk mewakili operasi tak segerak. Untuk menukar setTimeout kepada Promise, kita boleh membungkusnya dalam pembina Promise dan lulus fungsi resolve sebagai panggilan balik:
function later(delay) { return new Promise((resolve) => { setTimeout(resolve, delay); }); }
Fungsi ini akan mengembalikan Promise yang diselesaikan selepas kelewatan yang ditentukan.
Jika anda lebih suka mencipta pelaksanaan Janji anda sendiri, anda boleh menentukan janji prototaip dan gunakannya seperti berikut:
function setTimeoutReturnPromise() { function promise() { } promise.prototype.then = function() { console.log('timed out'); }; setTimeout(() => { return this; // Return the promise object }, 2000); return new promise(); }
Untuk mencipta Janji yang boleh dibatalkan, kita boleh membalut setTimeout dalam objek tersuai yang menyediakan kaedah batal:
const later = (delay, value) => { let timer = 0; let reject = null; const promise = new Promise((resolve, _reject) => { reject = _reject; timer = setTimeout(resolve, delay, value); }); return { get promise() { return promise; }, cancel() { if (timer) { clearTimeout(timer); timer = 0; reject(); reject = null; } } }; };
Objek ini mengembalikan Janji dan kaedah pembatalan yang boleh digunakan untuk menamatkan operasi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah `setTimeout` menjadi Janji dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!