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

标签 javascript promise settimeout

<分区>

在下面的代码中,我预计会有两次 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();

(抱歉这里的缩进。我不知道为什么它不尊重制表符。)

最佳答案

最基本的是:

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

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

 setTimeout(results, 4000, /*args:*/ resolve, 4);

关于javascript - 为什么当我添加 Promise 代码时,这段代码会立即执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48795404/

相关文章:

javascript - 显示从现在起 30 天后的日期,只有第 30 天检测是否是周末或假期是否正确

jQuery ajax 和 "when"函数

javascript - 如何从 setTimeout 做出 promise

javascript - setTimeout() 在 JavaScript 中如何工作?

javascript - 选择相同宽度的选项

javascript - 将值从 jsp 发送到 javascript 的安全方法

javascript - 什么是 JavaScript 预编译库?

javascript - 等待 Promise.all 继续执行

javascript - Express/React promise 陷入停滞

javascript - 许多 setTimeouts 的结果