javascript - Concernant Promise, pourquoi ne puis-je pas obtenir le bon ordre d'exécution lorsque je l'écris comme ceci?
学习ing
学习ing 2017-07-05 11:02:27
0
1
790
$.ajax({
    url: '/latestNewsIndex',
    type: 'get',
    dataType: 'json',
    timeout: 1000,
    success: function (data, status) {
        if (data.value.length == 0) {
            alert("暂时没有更多新闻!");
        }
        else {
            f2(data.value);
        }
    },
    fail: function (err, status) {
        alert('暂时没有更多新闻!');
    }
})

function f2(news) {
    var promise = new Promise(function(resolve,reject) {
        pullUpAction(news);
        resolve(1);
    });

    promise.then(
        function(id) {
            loaded()
        });
}

En ajax puis en appelant f2(), vous pouvez d'abord exécuter pullUpAction(news) puis exécuter charger(). Mais si f2() est exécuté directement, comme ceci :

f2(news);
function f2(news) {
    var promise = new Promise(function(resolve,reject) {
        pullUpAction(news);
        resolve(1);
    });

    promise.then(
        function(id) {
            loaded()
        });
}

L'effet de l'exécution des méthodes Promise les unes après les autres ne peut pas être obtenu. Pourquoi cela ?

学习ing
学习ing

répondre à tous(1)
阿神
test('test')
        function test (value) {
          let promise = new Promise(function (resolve, reject) {
            test1(value)
            resolve(1)
          })
          promise.then(function (id) {
            console.log('我后执行,我的值为:' + id)
          })
        }

        function test1 (value) {
          console.log(value)
          window.setTimeout(function (value) {
            console.log('我先执行,我的值为:' + value)
          }, 10 * 1000)
        }

Le résultat est

Lorsqu'il n'y a aucun paramètre, la fonction test1 est exécutée en premier, puis revient lorsque l'objet promis est exécuté avec succès. Une supposition possible est que lorsque vous utilisez une requête ajax, le temps d'exécution de la fonction f2 est exactement le même ou inférieur. que l'heure de fin de la requête ajax, vous voyez donc le résultat d'exécution souhaité, mais lors d'un appel direct sans ajax, le temps de réponse réel est reflété. Il est recommandé de déboguer pullUpAction ici. Ce qui précède est mon humble opinion et est uniquement à titre de référence.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!