Nodejs,Express和Promises-我可以正确实现吗?

时间:2019-04-17 23:30:23

标签: node.js express promise

我写了一条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函数内部重新调用了?

感谢您的帮助。

1 个答案:

答案 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
  }
});
相关问题