在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}
但我想要回答真或假。
答案 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);
});
}