【问题标题】:Why node.js asynchronous is not timeout?为什么node.js异步不超时?
【发布时间】:2021-05-01 12:36:56
【问题描述】:

第一个(已解决)

我正在尝试 node.js 的承诺。

function testpromise(data, ms) {
    return new Promise((resolve, reject) => {
        if (data=="hello") {
            setTimeout(resolve(data), ms);
            return;
        }
        reject("emm");
    })
}

testpromise("123", 3000)
    .then((res) => { console.log(res) })
    .catch((err) => { console.log(err) });

console.log("123");

如果我使用testpromise(),并提供一个“123”(reject)参数。

这个程序出错了。

否则,如果我提供一个“hello”参数(resolve),那么它是正确的。

为什么会这样?

最后

为此函数提供一个“hello”参数:

testpromise("hello", 3000)
    .then((res) => { console.log(res) })
    .catch((err) => { console.lof(err) });

console.log("123");

那么,节点返回是正确的。

但是

setTimeout()只有结果,没有延迟......

直观地说:

“你好”之前的“123”,这是正确的。

但是不耽误,不耽误,不耽误!!!

为什么?

请帮帮我!

非常感谢。

【问题讨论】:

  • 错字:console.lof 不是函数。我认为在你的错误中写的正是这个
  • 你的第二个问题:没有延迟,因为你只在 setTimepout 中包装resolve,但reject 你在检查条件后立即调用。 resolve 你也立即调用,因为你发送调用函数resolveresult 作为 setTimeout 回调,而不是函数本身
  • 那么,我该怎么办?
  • 补充:reject 确实没有设置延迟。但是设置了“解决”,也没有延迟?

标签: javascript node.js asynchronous promise es6-promise


【解决方案1】:
setTimeout(()=>resolve(data), ms);

你必须将函数传递给 setTimeout,而不是函数的结果

【讨论】:

  • ``` setTimeout(()=>resolve(data), ms); ```你必须将函数传递给setTimeout,而不是函数的结果
  • 这没用!
  • 箭头函数也是函数。
  • ()=>resolve(data) - 它是一个函数。但是resolve(data) - 这是函数的结果
猜你喜欢
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 2011-03-19
  • 1970-01-01
相关资源
最近更新 更多