> 웹 프론트엔드 > JS 튜토리얼 > JavaScript의 대기/비동기 기능 및 사용법에 대한 자세한 설명

JavaScript의 대기/비동기 기능 및 사용법에 대한 자세한 설명

coldplay.xixi
풀어 주다: 2020-06-15 16:08:45
앞으로
3002명이 탐색했습니다.

JavaScript의 대기/비동기 기능 및 사용법에 대한 자세한 설명

JavaScript에서 Wait/async의 역할과 사용법

공유:

await/async는 ES7의 가장 중요한 기능 중 하나입니다. JS를 위한 최고의 비동기 솔루션입니다. ES2016에는 포함되지 않았지만 곧 출시될 예정이며 현재 ES-NextStage4 단계에 있습니다.

바로 예를 들어보겠습니다. 예를 들어 제품 데이터 => 사용자 데이터 => 댓글 데이터

오래된 친구 Ajax

전통적인 글쓰기, 설명할 필요가 없습니다

// 获取产品数据
ajax('products.json', (products) => {
    console.log('AJAX/products >>>', JSON.parse(products));
    // 获取用户数据
    ajax('users.json', (users) => {
        console.log('AJAX/users >>>', JSON.parse(users));
        // 获取评论数据
        ajax('products.json', (comments) => {
            console.log('AJAX/comments >>>', JSON.parse(comments));
        });
    });
});
로그인 후 복사

새 친구가 아닙니다. Promise

Promise 오랫동안 언급되어 왔으며 ES6의 일부입니다. Promise는 콜백 지옥으로 인한 파멸의 피라미드를 제거하여 코드를 더 명확하게 만들 수 있습니다.

// Promise
// 封装 Ajax,返回一个 Promise
function requestP(url) {
    return new Promise(function(resolve, reject) {
        ajax(url, (response) => {
            resolve(JSON.parse(response));
        });
    });
}
// 获取产品数据
requestP('products.json').then(function(products){
    console.log('Promises/products >>>', products);
});
// 获取用户数据
requestP('users.json').then(function(users){
    console.log('Promises/users >>>', users);
});
// 获取评论数据
requestP('comments.json').then(function(comments){
    console.log('Promises/comments >>>', comments);
});
로그인 후 복사

물론 Promise.all을 사용하면 더 간결해질 수 있습니다

Promise.all([
    requestP('products.json'),
    requestP('users.json'),
    requestP('comments.json')
])
.then(function(data) {
    console.log('Parallel promises >>>', data);
});
로그인 후 복사

강력한 새 친구 제너레이터

제너레이터도 ES6의 새로운 기능으로 코드를 일시 중지/실행할 수 있습니다. Yield는 일시 중지를 의미하고 iterator.next는 다음 단계를 실행하는 것을 의미합니다. Generator를 이해하지 못해도 무시하고 Wait/async를 직접 배울 수 있습니다.

// Generators
function request(url) {
    ajax(url, (response) => {
        iterator.next(JSON.parse(response));
    });
}
function *main() {
    // 获取产品数据
    let data = yield request('products.json');
    // 获取用户数据
    let users = yield request('users.json');
    // 获取评论数据
    let products = yield request('comments.json');
    console.log('Generator/products >>>', products);
    console.log('Generator/users >>>', users);
    console.log('Generator/comments >>>', comments);
}
var iterator = main();
iterator.next();
碉堡的朋友 await/async
与 Promise 结合使用
// 封装 Ajax,返回一个 Promise
function requestP(url) {
    return new Promise(function(resolve, reject) {
        ajax(url, (response) => {
            resolve(JSON.parse(response));
        });
    });
}
(async () => {
    // 获取产品数据
    let data = await requestP('products.json');
     // 获取用户数据
    let users = await requestP('users.json');
     // 获取评论数据
    let products = await requestP('comments.json');
    console.log('ES7 Async/products >>>', products);
    console.log('ES7 Async/users >>>', users);
    console.log('ES7 Async/comments >>>', comments);
}());
로그인 후 복사

Fetch API와 함께 사용:

(async () => {
// Async/await using the fetch API
    try {
         // 获取产品数据
        let products = await fetch('products.json');
        // Parsing products
        let parsedProducts = await products.json();
        // 获取用户数据
        let users = await fetch('users.json');
        // Parsing users
        let parsedUsers = await users.json();
        // 获取评论数据
        let comments = await fetch('comments.json');
        // Parsing comments
        let parsedComments = await comments.json();
        console.log('ES7 Async+fetch/products >>>', parsedProducts);
        console.log('ES7 Async+fetch/users >>>', parsedUsers);
        console.log('ES7 Async+fetch/comments >>>', parsedComments);
    } catch (error) {
        console.log(error);
    }
}());
로그인 후 복사

배열 순서로 실행

(async () => {
    let parallelData = await* [
        requestP('products.json'),
        requestP('users.json'),
        requestP('comments.json')
    ];
    console.log('Async parallel >>>', parallelData);
}());
로그인 후 복사

다시 Fetch

(async () => {
    let parallelDataFetch = await* [
        (await fetch('products.json')).json(),
        (await fetch('users.json')).json(),
        (await fetch('comments.json')).json()
    ];
    console.log('Async parallel+fetch >>>', parallelDataFetch);
}());
로그인 후 복사

와 결합하여 Async를 사용하여 동기적 사고로 비동기 코드를 해결하는 것이 매우 멋지고 상쾌합니다!

추천 튜토리얼: "js 기본 튜토리얼"

위 내용은 JavaScript의 대기/비동기 기능 및 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:webhek.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿