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
肯定是异步。