当我添加Promise代码时,为什么这段代码会立即执行?

use*_*723 2 javascript settimeout promise

在下面的代码中,我预计会有两个4秒的延迟.但是如果你运行代码,你会看到它立即执行.显然我不明白一些非常基本的东西,或者我是一个我看不到的愚蠢错误.

function calculatesomething(resolve) {
  console.log("calculating");

  setTimeout(results(resolve,3),4000);
}

var answer=0;
function results(resolve,n) {
  console.log("got results");

  answer=1;
  resolve(answer+n);
}



function doingstuff() {
  console.log("starting");

  var promise1 = new Promise(function(resolve) {
    setTimeout(calculatesomething(resolve),4000);
  });

  promise1.then(function(value) {
    console.log("done: "+value);
  });

  console.log("regular execution");
}

doingstuff();
Run Code Online (Sandbox Code Playgroud)

(抱歉这里有缩进.我不知道为什么它不尊重标签.)

Jon*_*lms 6

最根本的是:

 setTimeout(results(resolve,3),4000);
Run Code Online (Sandbox Code Playgroud)

你不需要直接调用函数并传递返回的值,而是传递函数引用:

 setTimeout(results, 4000, /*args:*/ resolve, 4);
Run Code Online (Sandbox Code Playgroud)