ฉันใช้ฟังก์ชัน async ภายในวัตถุเพื่อส่งการตอบกลับใน express.js
รหัสตัวควบคุม:
module.exports = {
async signUpEmail(req, res) {
/**
* @description Parameters from body
* @param {string} firstName - First Name
* @inner
*/
const firstName = req.body.firstName;
res.send({ success: name });
throw new Error(); // purposely Done
}
}
คำถาม:
เนื่องจากเมธอด signUpEmail เป็นแบบอะซิงก์ในกรณีของฉัน และมันจะถูกปฏิเสธด้วยวิธี async ใดก็ตามของฉันที่นี่ มันมา Error
(จงใจวางไว้ตรงนั้น)
ดังนั้นการเข้าสู่ระบบคอนโซลนี้
(node:13537) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error
(node:13537) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
ดังนั้นฉันควรจะจัดการมันจากเส้นทางที่ฉันเรียกมัน
รหัสเราเตอร์
const routes = require('express').Router();
const SignUpController = require('../controllers/signUpController')
// /signup
routes.post('/', SignUpController.signUpEmail);
module.exports = routes;
บางอย่างแบบนี้ SignUpController.signUpEmail().then(…);
แต่เนื่องจากฉันไม่ได้เรียกใช้ฟังก์ชันในเส้นทางที่ฉันเพิ่งผ่านไป สามารถทำได้อย่างมีประสิทธิภาพได้อย่างไร ?
PS: โปรดอย่าแนะนำวิธีแก้ปัญหาที่ซับซ้อนเกินไป ฉันเริ่มต้นด้วย JS และกำลังเรียนรู้ผ่าน
ฉันไม่ได้ใช้ตัวจัดการเส้นทางแบบ chainable เพราะฉันต้องการสร้างตัวจัดการเส้นทางแบบโมดูลาร์ที่สามารถติดตั้งได้
routes.pos('/', (...args) => SignUpController.signUpEmail().then(…))
- person Bergi   schedule 23.04.2017…signUpEmail(...args)…
หรืออะไรก็ตามที่ฟังก์ชันของคุณคาดหวัง - person Bergi   schedule 23.04.2017ReferenceError: args is not defined
จะมีประโยชน์มาก - person Ankur Anand   schedule 23.04.2017routes.post('/', (req, res) => SignUpController.signUpEmail(req, res).then(…))
- person Bergi   schedule 23.04.2017SignUpController.signUpEmail(req, res)
นี้และทำให้ผลลัพธ์ตามที่ส่งคืนโดยฟังก์ชันปกติ .. แก้ไขฉันด้วยถ้าฉันไม่เข้าใจ .. ขอบคุณสำหรับ ความช่วยเหลือที่ดี :) - person Ankur Anand   schedule 23.04.2017async/await
ไม่ใช่ เป็นส่วนหนึ่งของ ES7 แต่เป็นส่วนหนึ่งของ ES2017 - person Felix Kling   schedule 23.04.2017