Rumah hujung hadapan web tutorial js Janji dalam JavaScript: Panduan Terbaik untuk Pemula

Janji dalam JavaScript: Panduan Terbaik untuk Pemula

Jul 28, 2024 am 06:36 AM

Promises in JavaScript: The Ultimate Guide for Beginners

pengenalan

JavaScript ialah bahasa pengaturcaraan serba boleh yang digunakan terutamanya untuk pembangunan web. Salah satu ciri JavaScript yang paling berkuasa ialah keupayaannya untuk mengendalikan operasi tak segerak. Di sinilah janji datang, membolehkan pembangun mengurus kod tak segerak dengan lebih cekap. Panduan ini akan membawa anda melalui asas janji, memberikan pengetahuan yang mendalam dan contoh praktikal untuk membantu anda memahami dan menggunakannya dengan berkesan.

Jadual Kandungan

Heading Subtopics
What is a Promise in JavaScript? Definition, State of a Promise, Basic Syntax
Creating a Promise Example, Resolving, Rejecting
Chaining Promises then(), catch(), finally()
Handling Errors Common Pitfalls, Error Handling Techniques
Promise.all() Usage, Examples, Handling Multiple Promises
Promise.race() Usage, Examples, First Settled Promise
Promise.any() Usage, Examples, First Fulfilled Promise
Promise.allSettled() Usage, Examples, When All Promises Settle
Async/Await Syntax, Combining with Promises, Examples
Real-World Examples Fetch API, Async File Reading
Common Mistakes Anti-Patterns, Best Practices
Advanced Promise Concepts Custom Promises, Promise Combinators
FAQs Answering Common Questions
Conclusion Summary, Final Thoughts

Apakah Janji dalam JavaScript?

Janji dalam JavaScript ialah objek yang mewakili penyiapan atau kegagalan operasi tak segerak. Ia membolehkan anda mengaitkan pengendali dengan nilai kejayaan akhirnya atau sebab kegagalan tindakan tak segerak. Ini membolehkan kaedah tak segerak mengembalikan nilai seperti kaedah segerak: daripada segera mengembalikan nilai akhir, kaedah tak segerak mengembalikan janji untuk membekalkan nilai pada satu ketika pada masa hadapan.

Keadaan Janji

Janji boleh dibuat dalam salah satu daripada tiga keadaan:

  1. Belum selesai: Keadaan awal, tidak dipenuhi atau ditolak.
  2. Dipenuhi: Operasi selesai dengan jayanya.
  3. Ditolak: Operasi gagal.

Sintaks Asas Janji

let promise = new Promise(function(resolve, reject) {
    // Asynchronous operation
    let success = true;

    if(success) {
        resolve("Operation successful!");
    } else {
        reject("Operation failed!");
    }
});
Salin selepas log masuk

Mencipta Janji

Membuat janji melibatkan pengwujudan objek Promise baharu dan menghantar fungsi kepadanya. Fungsi ini mengambil dua parameter: selesaikan dan tolak.

Contoh

let myPromise = new Promise((resolve, reject) => {
    let condition = true;
    if(condition) {
        resolve("Promise resolved successfully!");
    } else {
        reject("Promise rejected.");
    }
});

myPromise.then((message) => {
    console.log(message);
}).catch((message) => {
    console.log(message);
});
Salin selepas log masuk

Dalam contoh ini, myPromise akan berjaya diselesaikan dan log "Janji diselesaikan dengan jayanya!" ke konsol.

Merangkai Janji

Salah satu ciri hebat janji ialah keupayaan untuk merantainya. Ini membolehkan anda melakukan urutan operasi tak segerak dengan cara yang boleh dibaca dan diselenggara.

kemudian()

Kaedah then() digunakan untuk mengendalikan pemenuhan janji.

myPromise.then((message) => {
    console.log(message);
    return "Next step";
}).then((nextMessage) => {
    console.log(nextMessage);
});
Salin selepas log masuk

tangkap ()

Kaedah catch() digunakan untuk menangani penolakan janji.

myPromise.then((message) => {
    console.log(message);
}).catch((error) => {
    console.log(error);
});
Salin selepas log masuk

akhirnya()

Kaedah finally() digunakan untuk melaksanakan kod tanpa mengira sama ada janji itu ditepati atau ditolak.

myPromise.finally(() => {
    console.log("Promise is settled (either fulfilled or rejected).");
});
Salin selepas log masuk

Mengendalikan Ralat

Mengendalikan ralat dalam janji adalah penting untuk kod yang mantap.

Perangkap Biasa

  1. Mengabaikan Ralat: Sentiasa kendalikan ralat menggunakan catch().
  2. Terlupa untuk Kembali: Pastikan anda membalas janji dalam pengendali kemudian().

Teknik Pengendalian Ralat

myPromise.then((message) => {
    console.log(message);
    throw new Error("Something went wrong!");
}).catch((error) => {
    console.error(error.message);
});
Salin selepas log masuk

Promise.all()

Promise.all() mengambil pelbagai janji dan mengembalikan satu janji yang diselesaikan apabila semua janji dalam tatasusunan diselesaikan, atau menolak jika mana-mana janji ditolak.

Penggunaan

let promise1 = Promise.resolve(3);
let promise2 = 42;
let promise3 = new Promise((resolve, reject) => {
    setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then((values) => {
    console.log(values); // [3, 42, "foo"]
});
Salin selepas log masuk

Promise.race()

Promise.race() mengembalikan janji yang diselesaikan atau ditolak sebaik sahaja salah satu janji dalam tatasusunan diselesaikan atau ditolak.

Penggunaan

let promise1 = new Promise((resolve, reject) => {
    setTimeout(resolve, 500, 'one');
});
let promise2 = new Promise((resolve, reject) => {
    setTimeout(resolve, 100, 'two');
});

Promise.race([promise1, promise2]).then((value) => {
    console.log(value); // "two"
});
Salin selepas log masuk

Promise.any()

Promise.any() mengembalikan janji yang diselesaikan sebaik sahaja mana-mana janji dalam tatasusunan dipenuhi atau ditolak jika semua janji ditolak.

Penggunaan

let promise1 = Promise.reject("Error 1");
let promise2 = new Promise((resolve, reject) => setTimeout(resolve, 100, "Success"));
let promise3 = new Promise((resolve, reject) => setTimeout(resolve, 200, "Another success"));

Promise.any([promise1, promise2, promise3]).then((value) => {
    console.log(value); // "Success"
}).catch((error) => {
    console.log(error);
});
Salin selepas log masuk

Promise.allSettled()

Promise.allSettled() mengembalikan janji yang diselesaikan selepas semua janji yang diberikan sama ada diselesaikan atau ditolak, dengan pelbagai objek yang masing-masing menerangkan hasil setiap janji.

Penggunaan

let promise1 = Promise.resolve("Resolved");
let promise2 = Promise.reject("Rejected");

Promise.allSettled([promise1, promise2]).then((results) => {
    results.forEach((result) => console.log(result.status));
});
Salin selepas log masuk

Async/Tunggu

Kata kunci async dan menunggu membolehkan anda bekerja dengan janji dengan cara yang lebih segerak.

Sintaks

async function myFunction() {
    let myPromise = new Promise((resolve, reject) => {
        setTimeout(() => resolve("Done!"), 1000);
    });

    let result = await myPromise; // Wait until the promise resolves
    console.log(result); // "Done!"
}

myFunction();
Salin selepas log masuk

Berpadu dengan Janji

async function fetchData() {
    try {
        let response = await fetch('https://api.example.com/data');
        let data = await response.json();
        console.log(data);
    } catch (error) {
        console.error("Error fetching data: ", error);
    }
}

fetchData();
Salin selepas log masuk

Contoh Dunia Nyata

Ambil API

API Ambil ialah kes penggunaan biasa untuk janji.

fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
Salin selepas log masuk

Pembacaan Fail Async

Menggunakan janji untuk membaca fail dalam Node.js.

const fs = require('fs').promises;

async function readFile() {
    try {
        let content = await fs.readFile('example.txt', 'utf-8');
        console.log(content);
    } catch (error) {
        console.error('Error reading file:', error);
    }
}

readFile();
Salin selepas log masuk

Kesilapan Biasa

Anti-Corak

  1. Neraka Panggilan Balik: Elakkan panggilan bersarang kemudian().
  2. Mengabaikan Ralat: Sentiasa kendalikan penolakan janji.

Amalan Terbaik

  1. Sentiasa Membalas Janji: Pastikan anda membalas janji dalam pengendali then() and catch() anda.
  2. Gunakan Async/Await: Permudahkan pengendalian janji dengan async dan tunggu.

Konsep Janji Lanjutan

Janji Tersuai

Anda boleh membuat janji tersuai untuk mengendalikan operasi tak segerak tertentu.

function customPromiseOperation() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Custom operation complete!");
        }, 2000);
    });
}

customPromiseOperation().then((message) => {
    console.log(message);
});
Salin selepas log masuk

Penggabung Janji

Gabungkan berbilang janji menggunakan penggabung seperti Promise.all(), Promise.race(), dll., untuk mengendalikan aliran tak segerak yang kompleks.

Soalan Lazim

Bagaimanakah janji membantu dengan pengaturcaraan tak segerak?
Janji menyediakan cara yang lebih bersih dan mudah dibaca untuk mengendalikan operasi tak segerak berbanding panggilan balik tradisional, mengurangkan risiko "neraka panggil balik".

Apakah perbezaan antara then() dan `

tangkap()?
then() digunakan untuk mengendalikan janji yang diselesaikan, manakala catch()` digunakan untuk mengendalikan janji yang ditolak.

Bolehkah anda menggunakan janji dengan kod JavaScript yang lebih lama?
Ya, janji boleh digunakan dengan kod JavaScript yang lebih lama, tetapi untuk keserasian penuh, anda mungkin perlu menggunakan polyfill.

Apakah faedah menggunakan Promise.all()?
Promise.all() membolehkan anda menjalankan berbilang janji secara selari dan menunggu kesemuanya selesai, menjadikannya lebih mudah untuk mengurus berbilang operasi tak segerak.

Bagaimana async/menunggu meningkatkan pengendalian janji?
sintaks async/waiit menjadikan kod asynchronous kelihatan dan berkelakuan lebih seperti kod segerak, meningkatkan kebolehbacaan dan kebolehselenggaraan.

Apa yang berlaku jika janji tidak diselesaikan atau ditolak?
Jika janji tidak diselesaikan atau ditolak, ia kekal dalam keadaan belum selesai selama-lamanya. Adalah penting untuk memastikan semua janji akhirnya diselesaikan atau ditolak untuk mengelakkan masalah yang berpotensi.

Kesimpulan

Janji ialah bahagian asas JavaScript moden, membolehkan pembangun mengendalikan operasi tak segerak dengan lebih cekap dan mudah dibaca. Dengan menguasai janji, anda boleh menulis kod yang lebih bersih dan lebih boleh diselenggara yang mengendalikan kerumitan pengaturcaraan tak segerak dengan berkesan. Sama ada anda mengambil data daripada API, membaca fail atau melaksanakan tugas tak segerak tersuai, memahami janji adalah penting untuk mana-mana pembangun JavaScript.

Atas ialah kandungan terperinci Janji dalam JavaScript: Panduan Terbaik untuk Pemula. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1666
14
Tutorial PHP
1273
29
Tutorial C#
1253
24
Enjin JavaScript: Membandingkan Pelaksanaan Enjin JavaScript: Membandingkan Pelaksanaan Apr 13, 2025 am 12:05 AM

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Apr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Apr 14, 2025 am 12:05 AM

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

JavaScript dan Web: Fungsi teras dan kes penggunaan JavaScript dan Web: Fungsi teras dan kes penggunaan Apr 18, 2025 am 12:19 AM

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

JavaScript in Action: Contoh dan projek dunia nyata JavaScript in Action: Contoh dan projek dunia nyata Apr 19, 2025 am 12:13 AM

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami Enjin JavaScript: Butiran Pelaksanaan Memahami Enjin JavaScript: Butiran Pelaksanaan Apr 17, 2025 am 12:05 AM

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Apr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Python vs JavaScript: Persekitaran dan Alat Pembangunan Python vs JavaScript: Persekitaran dan Alat Pembangunan Apr 26, 2025 am 12:09 AM

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

See all articles