我写了一条Express路由,其中通过3个不同的函数依次解析了输入数据-经过进一步测试,我意识到它正在对请求进行排队并一次返回一个请求。
我现在使函数返回promise,并将它们链接在route函数中;我看过的所有Promise示例都是围绕小型函数构建的,这些函数很明显如何实现错误处理。我的实现现在似乎可以正常工作了,但我想知道a)在此处使用Promises是否正确,b)我的实现是否正确/如何处理错误。
function promiseFunction1(){
return new Promise(function(resolve,reject){
//for loop {
//if statement {
arr.push(etc);
}
}
resolve(arr);
});
}
function promiseFunction2(arr){
return new Promise(function(resolve,reject){
//if statement{
}
//nested{
//loops{
}
}
//process data
resolve(data);
});
}
app.post('/route', function(req,res){
//prep data and declare variables then:
var var1 = promiseFunction1();
var1.then(function(result){
var2 = result;
var nextVal = promiseFunction2(var2);
nextVal.then(function(data){
res.send(data);
});
});
}
鉴于我寻找的每个Promise示例都在等待API调用或函数来解决,而不仅仅是一些耗时的循环,因此我有点犹豫是否将此称为“正确”(因此我可以在这些条件?),以及我所见过的每个示例都处理Promise函数内部的错误,但这通常特定于从promise内部调用的函数-在我的情况下,我应该针对Promise函数处理错误,而是在route函数内部重新调用了?
感谢您的帮助。
答案 0 :(得分:0)
您的promiseFunction
都不希望异步执行任何操作,因此它们不要求构造Promise。取而代之的是,您可以简单地调用这些函数,并让它们同步返回所需的值:
function myFn1() {
//for loop {
//if statement {
// arr.push(etc);
// }
return arr;
}
function myFn2(arr){
//if statement{
//nested{
//loops{
//}
//}
//}
//process data
return data;
}
请注意,由于这里没有异步,因此您需要return
而不是resolve
。
然后,您可以在.post
中调用那些返回非Promise值的函数,并立即使用该值,而不必首先在其上调用then
:
app.post('/route', function(req,res){
const result = myFn1();
const nextVal = promiseFunction2(var2);
res.send(nextVal);
});
如果这些函数是同步的,则有可能引发错误,请将它们放在try
/ catch
中:
app.post('/route', function(req,res){
try {
const result = myFn1();
const nextVal = myFn2(result );
res.send(nextVal);
} catch(e) {
// handle errors
}
});