如何使用 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);
}
在 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);
}