为 "city not found" 错误写入条件

Write conditional for a "city not found" error

我正在研究和构建一个使用 openweathermap 的项目的天气日志应用程序。

当我写的邮政编码不属于我 API 的国家/地区时,控制台记录“cod:404 message:city 未找到”,但我不知道如何将其显示给用户。我知道我需要在我的 postData 代码之前写一个带有警告(错误的邮政编码!)的条件,但我被困在这里...

function action(e){
    const postalCode = document.getElementById('zip').value;
    const feelings = document.getElementById('feelings').value;
    console.log(newDate);
 
    getTemp(baseUrl,postalCode, apiKey)
    .then(function (data){
         if(/*Message error*/){
            alert('Wrong zip code, try again!');
        }
        //Route
        postData('http://localhost:8000/addData', { date: newDate, temp: data.main.temp, feel: feelings})
    .then(function(){
        //User Interface
        updateUI()
        })    
    })
}

enter image description here

你可以这样使用:

getTemp(baseUrl,postalCode, apiKey)
.catch(function (error){
    alert('Wrong zip code, try again!');
    console.log(error);
})
.then((data) => {
    postData('http://localhost:8000/addData', { date: newDate, temp: data.main.temp, feel: feelings})
      .then(function(){
        //User Interface
        updateUI()
    })    
})

由于响应是包含codmessage的对象,您可以检查if (data.cod === 404) {
然后显示你的警报。
注意一定要return;或者把postData放在else里面,否则alert显示

后还是会执行

@Yehr59 的回答有问题,getTemp 可能不会抛出错误,因此它不会到达 .catch 函数。因此,在 .then 中,您可以执行我上面在此答案中提到的检查。

你会得到这样的结果:

getTemp(baseUrl,postalCode, apiKey)
    .then(function (data){
         if(String(data.cod) === '404'){
            alert('Wrong zip code, try again!');
        } else {
            //Route
            postData('http://localhost:8000/addData', { date: newDate, temp: data.main.temp, feel: feelings})
        }

我还在 String 周围包裹了 data.cod,所以它始终是一个字符串。我们无法比较

"404" === 404 // false

编辑:另一种方法是修改您的 getTemp 函数,如果响应代码为 404,它会 throw 一个错误,然后您知道一旦 .then 被调用,它就成功了,如果调用 .catch,您将处理一个错误