如何使用 axios 返回布尔值

Posted

技术标签:

【中文标题】如何使用 axios 返回布尔值【英文标题】:How to return boolean with axios 【发布时间】:2018-01-12 04:59:46 【问题描述】:

在 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]]:未定义

但我想要的是真或假作为回报。

【问题讨论】:

How do I return the response from an asynchronous call?的可能重复 如何在我的例子中使用回调函数? 【参考方案1】:

问题不在于 VueJS 也不在于 Axios……我认为你误解了 Promises

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

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

1.承诺

返回一个承诺,并在调用 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.异步/等待

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

【讨论】:

【参考方案2】:

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

【讨论】:

我在 console.log 中得到了正确的输出。但是,如果我在其他地方调用该函数来检查它是否返回 true 或 false,因为它是异步的,所以我没有及时得到返回。我该如何等待响应? 返回allContactsSaved中的promise,使用promise时调用.then

以上是关于如何使用 axios 返回布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何从大量可为空的布尔值中返回布尔值?

如何在参考光标中返回布尔值? [复制]

如何在生命周期Scope.launch 中返回布尔值

我如何检查字符串是返回布尔值的泰语,如 isalpha()

如何从AsyncTask返回布尔值?

如何在 Swift 的完成处理程序中返回布尔值