javascript - Keraguan tentang setTimeout dan Promise
代言
代言 2017-06-12 09:21:50
0
5
817

menyatakan kekeliruan tentang perbezaan antara setTimeout(resolve('World'), ms);setTimeout(resolve, ms, 'World'); dan

. 🎜

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);
  });
代言
代言

membalas semua(5)
習慣沉默

Ini ialah perbezaan antara func() dan func Parameter pertama setTimeout ialah func Jika func() digunakan, ia bersamaan dengan nilai pulangannya sebagai parameter pertama.
Contohnya:

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

setTimeout(test(), 1000);

kira-kira bersamaan dengan:

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

Parameter pertama yang diluluskan dilaksanakan serta-merta, bukan nama fungsi

淡淡烟草味

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

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

Laksanakan segera pada masa initest.

曾经蜡笔没有小新

Parameter pertama setTimeout mestilah fungsi

Satu fungsi

Satu fungsi

(Kenapa ramai yang tak faham)

setTimeout(resolve, ms, 'World'); 其中 resolve 是一个函数,因此这段的行为正常
setTimeout(resolve('World'), ms); 其中 resolve('World') 不是函数,是什么决定于 resolve 的返回值类型,但无论如何,resolve Apabila daftar pemasa, ia telah pun dilaksanakan, jadi secara semula jadi tiada kesan kelewatan

巴扎黑

=====================================
Jawapan berikut adalah tidak sah: Saya tidak menyemak soal dengan teliti. .
Secara amnya tiada perbezaan.

Hanya! ! ! !

Ada masalah dengan sokongan setTimeout(resolve, ms, 'World') dalam pelayar IE. (Nampaknya IE

Bahan rujukan: (lihat nota berlatar belakang kuning di dalam)

WindowOrWorkerGlobalScope.setTimeout()

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan