如何推迟长期简单功能



i创建微服务,在一个函数中,我有其他三个函数,例如:

functionA();
functionB();
functionC();
return json({status: processed});

所有功能都是同步的,但它们执行数学操作。functionb是执行时间最长的,因此我想将其用作HTTP请求,这是异步的。

我尝试了:

functionB() {
    return new Promise(//etc...);
}

async functionB() {
    return 1;
}

但是我的功能仍然是同步的。

节点如何识别可以立即运行的函数或应该转到事件循环?为什么在这种情况下承诺和异步不起作用?

此记录'foo',然后'bar'

function foobar() {
  var p = Promise.resolve();
  p.then(() => console.log('bar'));
  console.log('foo');
  return p;
}

虽然该记录'bar'然后'foo'。

function foobar() {
  var p = new Promise((resolve, reject) => {
    console.log('bar');
    resolve();
  })
  console.log('foo');
  return p;
}

这是因为将回调(resolve, reject) => ...传递给new Promise是立即称为Promise Creation过程的一部分,因此回调实际上是一个同步函数。

与异步函数类似。

async function B() {
  return 1;
}

标记同步函数async不会神奇地使其"异步"。如果函数主体(此示例中的return 1(由所有同步操作组成,则与将回调传递给new Promise相同,当调用时仍同步执行。

如果您确实需要将任务推迟到下一个循环迭代,则使用setTimeout(cb)setImmediate(cb)更有希望。 cb肯定是异步。

最新更新