我创建微服务,并且在一个功能中,我还拥有其他三个功能:
functionA();
functionB();
functionC();
return json({status: processed});
所有函数都是同步的,但是它们执行数学运算。 functionB是执行时间最长的,所以我想将其用作异步的HTTP请求。
我尝试过:
functionB() {
return new Promise(//etc...);
}
和
async functionB() {
return 1;
}
但是我的功能仍然是同步的。
Node如何识别可以立即运行或应该进入事件循环的功能?为什么Promise和async在这种情况下不起作用?
答案 0 :(得分:0)
先记录“ 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创建过程中被立即调用,因此该回调实际上是一个同步函数。
类似地具有异步功能。
async function B() {
return 1;
}
标记同步功能async
并不能使它“异步”。如果函数主体(在此示例中为return 1
)包含所有同步操作,则它与传递给new Promise
的回调相同,在调用时仍会同步执行。
如果确实需要将任务推迟到下一个循环迭代,则使用setTimeout(cb)
或setImmediate(cb)
更有希望。 cb
肯定是异步的。