如何使用 axios return 布尔值

How to return boolean with axios

在 VueJS 中,我正在尝试 return 带有 axios 的布尔值

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;
    }));
  }

console.log 只是 returning

Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}

但我想要 return 中的 true 或 false。

您可以使用 every 来确保保存每个联系人

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

但这仍然是return一个承诺 你可以链接另一个承诺:

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

}

问题不在于 VueJS,也不在于 Axios...我认为您误解了 Promises

你的函数是异步的,用Promises解决问题,还有axios。

要让 allContactsSaved() 返回 true/false 供以后使用,您有 3 个选项:

1.承诺

Return 一个承诺,然后在调用 allContactsSaved 时使用 .then,如下所示:

 // 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。 Async/await

这是 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);
 }