我有两种具有共同响应逻辑的方法,我试图将响应逻辑提取到另一种方法并链接到所有的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
答案 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();
?>