如何将响应处理程序用于承诺结果

时间:2018-10-18 01:14:28

标签: javascript node.js promise httpresponse

我有两种具有共同响应逻辑的方法,我试图将响应逻辑提取到另一种方法并链接到所有的Promise,但是确实抛出了错误:

原始方法:

  method1: function (req, res) {
    db.getData(req)
      .then(data => {
          res.status(200).send({ status: 200, data: data })
      })
      .catch(error => {
        res.status(500).send({ status: 500, statusText: error.message })
      })
  },
  method2: function (req, res) {
    db.getData2(req)
      .then(data => {
          res.status(200).send({ status: 200, data: data })
      })
      .catch(error => {
        res.status(500).send({ status: 500, statusText: error.message })
      })
  },

我想做什么? (将响应承诺提取为另一种常用方法)

responseMethod: function (promise) {
    promise
      .then(data => {
        res.status(200).send({ status: 200, data: data })
      })
      .catch(error => {
        res.status(500).send({ status: 500, statusText: error.message })
      })
  },
  method1: function (req, res) {
    responseMethod(db.getData(req))
  },
  method2: function (req, res) {
    responseMethod(db.getData2(req))
  },

错误:

Reference Error: responseMethod is not defined

2 个答案:

答案 0 :(得分:1)

  

参考错误:未定义responseMethod

您的错误与javascript中的this关键字有关,而不与任何异步内容有关。

const containerObj = {
  responseMethod: function() {
    return 'ok'                  // simplified for testing
  },
  method1: function() {
    return this.responseMethod() // succeeds because it references 'this' object
  },
  method2: function() {
    return responseMethod()      // fails because you need to reference 'this'
  },
}

/* TESTS */
console.log(containerObj.method1()) // should succeed
console.log(containerObj.method2()) // should fail

希望这会有所帮助。 干杯,

答案 1 :(得分:0)

我找到了解决此问题的方法:

以下答案:

  

修复#1:作为responseMethod中的参数

     

修复#2 :在responseMethod中返回诺言

<?php
ob_start();
?>
<div>
  <ul class="detail-attachments clearfix">
    <?php
	  foreach ($list_file as $file) { ?>
      <li id="datas">
        <?php
			if ($file["tipe"]=="image/jpeg" or $file["tipe"]=="image/bmp" or $file["tipe"]=="image/png") { ?>
          <span class="detail-attachment-icon has-img">
				<a href="'.base_url().'assets/files/file_materi/'.$data["file_name"].'" target="_blank">
				  <img src="'.base_url().'assets/files/file_materi/'.$data["file_name"].'">
				</a>
			  </span>
          <?php }
			else { ?>
          <span class="detail-attachment-icon"><i class="fa fa-file-o"></i></span>
          <div id="nama_filenya">

            <?php 
				  echo $data["file_name"];
				  ?>
          </div>
          <?php }
		  ?>
          <div class="detail-attachment-info">
            <button type="button" class="btn btn-danger btn-block btn-sm" data-toggle="modal" data-target="#konfirmasi_hapus<?php echo $data[" id_file_materi "]; ?>">Hapus</button>
            </a>
          </div>
      </li>

      <?php }
	?>
  </ul>
</div>
<?php
$output = ob_get_clean();
?>