IT이야기

공리와 함께 부울을 반환하는 방법

cyworld 2022. 4. 18. 21:50
반응형

공리와 함께 부울을 반환하는 방법

VueJS에서 나는 공리가 있는 부울을 반환하려고 한다.

allContactsSaved() {
    let promise = axios.get('/contacts');
    console.log(promise.then(function (response) {
        response.data.data.forEach(function(contact) {
          if (!contact.saved) {
            return false;
          }
        });
        return true;
    }));
  }

콘솔.log가 막 반환되는 중

약속 {[PromiseStatus]:"pending", [[PromiseValue]]: 정의되지 않음}

하지만 나는 그 대가로 진실과 거짓 중 하나를 원한다.

문제는 VueJS도 아니고 Axios도 아니고...내 생각에 너는 약속을 오해하는 것 같아.

당신의 기능은 비동기적이며 공리뿐만 아니라 문제를 해결하기 위해 Promise를 사용한다.

allContactsSaved()를 true/false로 반환하여 나중에 사용하려면 다음 3가지 옵션을 사용하십시오.

1. 약속

약속을 반환하고 .contactsSaved가 모두 호출되면 다음과 같이 사용하십시오.

 // Function
 // Returns promise
 allContactsSaved() {
    let promise = axios.get('/contacts').then(function (response) {
        // check if every one is saved
        const check = response.data.data.every(function(contact) {
          return contact.saved;
        });
        return check;
    }));
    return promise;
  }

 // Using it:
 allContactsSaved().then(function(isSaved) {
     console.log(isSaved);
 });

2. 콜백

나는 첫 번째 옵션이 이것보다 더 좋다고 생각한다.이건 좀 오래된 학교 방식이야.

 // Function
 // Returns promise
 allContactsSaved(callback) {
    axios.get('/contacts').then(function (response) {
        // check if every one is saved
        const check = response.data.data.every(function(contact) {
          return contact.saved;
        });
        if(callback) {
           callback(check);
        }
    }));
  }

 // Using it with function callback:
 allContactsSaved(function(isSaved) {
     console.log(isSaved);
 });

3. 비동기/대기

이는 ES6/7의 새로운 버전이며, JS 엔진 버전에 따라 다르며, 당신은 트랜스필러가 필요할 것이다.

 // Function
 // Returns promise
 async allContactsSaved() {
    const resp = await axios.get('/contacts');
    const check = response.data.data.every(function(contact) {
       return contact.saved;
    });
    return check;
  }

 // Using it, the caller function needs to be async:
 async function() {
     const result = await allContactsSaved();
     console.log(result);
 }

사용할 수 있다every모든 연락처가 저장되었는지 확인

return response.data.ever(contact => contact.saved)

그러나 이것은 당신이 다른 약속을 맺을 수 있다는 약속을 여전히 되돌려 줄 것이다.

allContactsSaved() {
let promise = axios.get('/contacts');
promise.then(function (response) {
    return response.data.ever(contact => contact.saved)
}).then((areTheySaved) => {
    console.log(areTheySaved);
});

}

참조URL: https://stackoverflow.com/questions/45503682/how-to-return-boolean-with-axios

반응형