Intellij Idea 경고 - "반환된 약속은 무시됩니다" 및 aysnc/wait
코드에서 Node.js v7.3으로 Express.js를 사용하고 있습니다.여기서 제가 만든 것은User Router나에게 요청을 전달하는 것.User Controller.
내부에서 비동기/대기를 사용하고 있습니다.User Controller비동기 호출을 수행합니다.문제는 IntelliJ가 저에게 경고를 한다는 것입니다.
로그인()에서 반환된 약속은 무시됩니다.
중요한 것은 나는 심지어 아무것도 돌려주지 않을 것입니다.login()방법.
여기 코드가 있습니다.
UserRouter.js
router.post('/login', function (req, res, next) {
userController.login(req, res); // I get the warning here
});
UserController.j
exports.login = async function (req, res) {
try {
const verifiedUser = await someFunction(req.body.access_code);
let user = await User.findOrCreateUser(verifiedUser);
res.status(200).send(user);
}
catch (err) {
res.status(400).send({success: false, error: err});
}
};
기본 약속만 사용하여 동일한 로그인 방법을 쓰면 이 경고가 표시되지 않습니다.제가 여기서 무언가를 잘못 이해하고 있는 것일까요, 아니면 IntelliJ의 잘못일까요?
편집 -
@Stephen 덕분에, 나는 비동기 함수가 약속을 반환하는 것을 이해하지만 Intellij가 비동기 함수에서 반환되는 것이 아무것도 없다는 것을 식별하고 그 경고를 표시하지 않는 것이 더 낫지 않을까요? 왜냐하면 내가 체인을 할 때.then()그 후에login()기능, 그것은 제공합니다.undefined결과에 반대합니다.비동기 함수에서 명시적으로 무언가를 반환하지 않으면 정의되지 않은 것이 반환된다는 것을 의미합니다.
"보이드" 연산자를 사용해야 합니다.
MDN에서: void는 "정의되지 않은 것으로 평가되는 표현식이 원하는 위치로 값을 생성하는 표현식을 평가하기 위한 것입니다."
router.post('/login', function (req, res, next) {
void userController.login(req, res); // Warning will not be shown now
});
그userController.login()함수는 약속을 반환하지만, 당신은 약속의 결과를 활용하여 아무것도 하지 않습니다.then()기능.
예:
userController.login(req, res).then(() => {
// Do something after login is successful.
});
또는 ES2017 구문에서:
await userController.login(req, res);
실제로 거기서 아무것도 하고 싶지 않다면 경고를 무시해도 될 것 같습니다.경고는 대부분 사용하지 않기 때문에 발생합니다.then()약속에 대한 함수는 보통 코드 냄새입니다.
중요한 것은 로그인() 방법에서 아무것도 반환하지 않는다는 것입니다.
"비동기"로 선언된 함수는 정의에 따라 약속을 반환합니다.예를 들어 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function 을 참조하십시오.
그러나 IDEA 경고는 검사일 뿐입니다.경고에서 "alt-enter, right"를 누르고 검사 레벨을 변경하여 경고가 사라지도록 할 수 있습니다.검사는 "JavaScript -> Probable bugs" 범주에 속하며 "약속을 반환하는 메서드 호출의 결과는 무시됩니다"라는 이름입니다.
그 만약당이그정나미말면라이치광럼처와신▁you▁if면라이▁manic▁really미.then()필수는 아니지만 경고가 필요한 경우 가능한 해결 방법은 다음과 같습니다.
functionWithAsync.error(console.error);
// or use a logger
functionWithAsync.error(log.error);
경고를 제거하는 또 다른 방법은 빈 항목을 정의하는 것입니다.then():
userController.login(req, res); // <- Get the warning here
userController.login(req, res).then(); // <- No warning
JetBrain 제품에 대해 이 경고를 차단하려는 경우.에 가다
Preferences > Inspections > JavaScript and TypeScript | Async code and promises | Result of method call returning a promise is ignored설정을 해제합니다.
는 중용사를 합니다.try{} catch(e){} NodeJs를 추가하는 했습니다.Error()기능의 끝까지 경고를 수정했습니다.
전체 코드:-
someArray.forEach(async (arrayValue) => {
try {
const prodData = await myAsyncFunc(arrayValue);
} catch(e) {
console.error(`Error: ${e}`);
}
}, Error());
Intellij Ide에서
노란색 경고 위에 마우스를 올립니다.
추가 작업 클릭
번째 줄의 합니다.In this case Add .then arrow sign
그런 다음 Edit inspection profile 설정을 클릭합니다.
취소됨Result of method call returning a그리고 나서.ok
기능.Async.catch() 포함;
각도에서 다음과 같은 값이 될 수 있습니다.
private async someMethod() {
await this.asyncMethod.catch();
}
언급URL : https://stackoverflow.com/questions/41278900/intellij-idea-warning-promise-returned-is-ignored-with-aysnc-await
'programing' 카테고리의 다른 글
| 하나의 데이터베이스에만 파일 허용 (0) | 2023.07.31 |
|---|---|
| 1:1 연결 테이블 및 CTE(예: 사용자 및 그룹에 대한 권한)를 사용하여 다른 행과 연결된 SQL 행 찾기 (0) | 2023.07.31 |
| Java의 mariadb 커넥터가 다른 언어의 커넥터보다 mariadb에 더 빨리 연결되는 이유는 무엇입니까? (0) | 2023.07.31 |
| Angular CLI 프로젝트를 업그레이드하는 방법은 무엇입니까? (0) | 2023.07.31 |
| PHP 사용 URL SPACE를 %20으로 바꾸기 (0) | 2023.07.31 |



