ネイティブのヒントを反応させます

デモ


        console.log('aaaaa0');
        setTimeout(() => {
            console.log('aaaaa1');
        }, 0);

        console.log('aaaaa3');


        new Promise((resolve, reject) => {
            console.log('aaaaa4')
            resolve('aaaaa4');

            console.log('aaaaa5');
            resolve('aaaaa5');

            console.log('aaaaa6');
            reject('aaaaa6')

            console.log('aaaaa7');
            reject('aaaaa7')
            console.log('aaaaa7.0');
        }).then((result) => {
            console.log('aaaaa8');
            console.log(result);
            console.log('aaaaa9');
        }).catch(e => {
            console.log('aaaaa10');
            console.log(e);
            console.log('aaaaa11');
        });

        console.log('aaaaa12');
        this.setState({
            countryId: 2
        }, () => {
            console.log('aaaaa2', this.state.countryId);
        });
        this.setState({
            countryId: 3
        }, () => {
            console.log('aaaaa13', this.state.countryId);
        });
        console.log('aaaaa14');

出力は、上記あります

aaaaa0
aaaaa3
aaaaa4
aaaaa5
aaaaa6
aaaaa7
aaaaa7.0
aaaaa12
aaaaa14
aaaaa2 3
aaaaa13 3
aaaaa8
aaaaa4
aaaaa9
aaaaa1

上記の興味はスクランブルした後、実行順序を観察することができます。

上記の結果が表示され、あなたは一時的に、次のいくつかの結果のように要約することができます。

setTimeoutはマクロタスクであります

約束は機能が複数のレゾールを持っていると拒否、最初は本当に有効になるとき、マイクロタスクであり、レゾール/拒否のリターンを意味するものではありません、彼らはコード実行の後ろになります。時間が約束を持っています

SETSTATEマイクロタスクは、最後のタスクは、マイクロにおいて実行され、その後、より実行する最初の時間約束が現れ、よりSETSTATEは、後者の値は、前に上書きされ、フィールドに、マージされます。

タスクがマイクロ終了した後、マクロタスクを実行します。

おすすめ

転載: www.cnblogs.com/shidaying/p/11778712.html