javascript - Des doutes sur setTimeout et Promise
代言
代言 2017-06-12 09:21:50
0
5
779

a exprimé sa confusion quant à la différence entre setTimeout(resolve('World'), ms);setTimeout(resolve, ms, 'World'); et

. 🎜

function timeout(ms = 100) {

  /*1. 为何这种写法,立即返回数据而不是等到过了 ms 后才返回*/
  // return new Promise((resolve, reject) => {
  //   setTimeout(resolve('World'), ms);
  // });

  /*2. 为何这种写法,等到过了 ms 后才返回*/
  return new Promise((resolve, reject) => {
    setTimeout(resolve, ms, 'World');
  });
}

timeout(1000)
  .then(value => {
    console.log(`Hello, ${value}`);
  })
  .catch(err => {
    console.error(err);
  });
代言
代言

répondre à tous(5)
習慣沉默

C'est la différence entre func() et func. Le premier paramètre de setTimeout est func() est utilisé, cela équivaut à ce que sa valeur de retour soit le premier paramètre.
Par exemple :

function test(){
    console.log('this is test!');
    return function () {
        console.log('this is return!');
    }
}

setTimeout(test(), 1000);

à peu près équivalent à :

console.log('this is test!');
setTimeout(function () {
        console.log('this is return!');
    }, 1000);
三叔

Le premier paramètre passé est exécuté immédiatement, pas le nom de la fonction

淡淡烟草味

et Promise无关,当你执行到setTimeout(resolve('World'), ms);时,浏览器就已经自动执行了resolve('World'), par exemple :

var test = function(value){
            console.log(value);
        }
        setTimeout(test('hello') , 2000);

Exécuter immédiatement à ce momenttest.

曾经蜡笔没有小新

Le premier paramètre de setTimeout doit être une fonction

Une fonction

Une fonction

(Pourquoi tant de gens ne comprennent pas)

setTimeout(resolve, ms, 'World'); 其中 resolve 是一个函数,因此这段的行为正常
setTimeout(resolve('World'), ms); 其中 resolve('World') 不是函数,是什么决定于 resolve 的返回值类型,但无论如何,resolve Lorsque enregistrez le timer, celui-ci a déjà été exécuté, donc naturellement il n'y aura pas d'effet de retard

巴扎黑

====================================
Les réponses suivantes ne sont pas valides : je n'ai pas examiné le questionnez soigneusement. .
Il n’y a généralement aucune différence.

Juste ! ! ! !

Il y a un problème avec la prise en charge de setTimeout(resolve, ms, 'World') dans le navigateur IE. (Il semble que IE

Matériaux de référence : (voir la note avec fond jaune à l'intérieur)

WindowOrWorkerGlobalScope.setTimeout()

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!