我对nodejs
开发相对较新。我需要异步执行一个函数做一些不重要的事情,这就是我想要异步执行它的原因,比如记录no。这种方法收到的电话。记录部分对我来说并不是非常关键,也不希望它以任何方式阻碍或减慢主流量。
我考虑过像这样使用return Promise
:
return new Promise( /* executor */ function(resolve, reject) { ... } );
但是观察到执行程序立即开始执行,如Mozilla docs中提到的那样(虽然不确定)。
我对这种行为不感兴趣,因为在我的正常流程(调用者函数)可以继续之前,executor
函数的一些计算将会运行。我知道我不应该保持计算密集的同步部分,我没有保持密集。
my flow的伪代码看起来像这样:
export let mainFunc = (req: Request, res: Response) => {
// logic for handling the request is here
// need to record analytic information here by calling
recordInformation(req);
}
function recordInformation(req){
return new Promise(function(resolve, reject) {
//some synchronous code followed by asynchronous code
});
}
只是我正在寻找一种方法,使调用函数mainFunc
在调用recordInformation
后永远不会等待一次计算。
答案 0 :(得分:1)
正如MDN文档所述,传递给new Promise()
的函数是同步执行的。
示例:
function temp() {
return new Promise(function(resolve, reject) {
console.log('This runs right away');
});
}
temp();
temp();
temp();
console.log('This runs last');
如果要异步运行某些代码,请将其传递给.then()
:
function temp() {
return Promise.resolve().then(function () {
console.log('This runs later');
});
}
temp();
temp();
temp();
console.log('This runs right away');
请记住,如果您想要做的只是在当前执行堆栈完成后运行一些代码,那么简单的setTimeout
可能同样好:
function temp() {
setTimeout(function () {
console.log('This runs later');
}, 1);
}
temp();
temp();
temp();
console.log('This runs right away');
答案 1 :(得分:0)
来自你的伪造代码;您可以回复该请求,然后再调用其他功能。这意味着您的所有请求处理(包括响应)都在您的其他函数之前执行:
export let mainFunc = (req: Request, res: Response) => {
// logic for handling the request is here
res.end('Hello World');
// response is now sent, feel free to do anything else at your leisure..
// need to record analytic information here by calling
recordInformation(req);
}
function recordInformation(req){
return new Promise(function(resolve, reject) {
//some synchronous code followed by asynchronous code
});
}