如何使用axios返回布尔值

时间:2017-08-04 09:54:02

标签: javascript vue.js boolean vuejs2 axios

在VueJS中,我试图返回一个带有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刚刚返回

  

承诺{[[PromiseStatus]]:"待定",[[PromiseValue]]:undefined}

但我想要回答真或假。

2 个答案:

答案 0 :(得分:1)

问题不在于VueJS和Axios ......我认为你误解了Promises

您的函数是异步的,并使用Promise来解决问题,以及axios。

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

<强> 1。许

返回一个promise,并在调用allContactsSaved时使用.then,如下所示:

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

<强> 2。回调

我认为第一种选择比这更好。这是一种古老的学校方式。

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

第3。异步/ AWAIT

这是ES6 / 7的新功能,取决于JS引擎的版本,你需要一个转发器

{{1}}

答案 1 :(得分:0)

您可以使用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);
});

}