0

私はnode.jsを初めて使用し、非同期のバックグラウンドを持っているため、些細な同期タスクを非同期で適切に実装する方法を理解しようとするのは愚かだと感じています。

たとえば、オブジェクトがあります。私はこのようにそれを取得します:

objManager.getObject(objId, function(error, object) {
  ...
})

objManager.getObject は、mongoDB への非同期呼び出しを実装し、オブジェクトを取得して、2 番目のパラメーターとしてコールバックに渡します。次に、前のオブジェクトに基づいて新しいオブジェクトを返す必要があります。しかし、オブジェクトにはフラグがあり、DB からフェッチするか、デフォルト値を設定する必要があります。必要なロジックは次のとおりです。

objManager.getObject(objId, function(error, object) {
  var objToReturn = {
    first_prop: 1,
    second_prop: "2",
    third_prop: null
  };
  if (Globals.setThirdDefault) {
    // here i need to set it as default. 
    objToReturn.third_prop = defaultThird;
    // Then there is a lot of lines of code
    res.send();
  } else {
    // here I need to fetch the flag from mongoDB, 
    // and I need to repeat a "lot of lines" in the callback
    // as it is async, and if I won't do that, my res.send() 
    // will be called before callback returns
    objManager.getThirdValue(function (error, thirdValue) {
      objToReturn.third_prop = thirdValue;
      // again, there is a lot of lines of code
      res.send();
    })
  }
})

管理できる方法の1つは、繰り返しコードに関数を使用することですが、これは正しいですか? このように、データベースからフェッチする必要があるいくつかのフラグを管理するために、多くの関数を作成する必要がありますか?

objManager.getObject(objId, function(error, object) {
  var objToReturn = {
    first_prop: 1,
    second_prop: "2",
    third_prop: null
  };

  var manageThird = function(thirdProp) {
    objToReturn.third_prop = thirdProp;
    // here will be my lines of code
  }

  if (Globals.setThirdDefault) {
    manageThird(defaultThird);
    res.send();
  } else {
    objManager.getThirdValue(function (error, thirdValue) {
      manageThird(thirdValue);
      res.send();
    })
  }
})

とにかくこれはうまくいきますか?

4

0 に答える 0