Maison  >  Questions et réponses  >  le corps du texte

javascript - Concernant Promise, pourquoi ne puis-je pas obtenir le bon ordre d'exécution lorsque je l'écris comme ceci?

$.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学习ing2663 Il y a quelques jours792

répondre à tous(1)je répondrai

  • 阿神

    阿神2017-07-05 11:04:27

    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.

    répondre
    0
  • Annulerrépondre