Javascript - 响应未定义的提取

时间:2017-05-31 20:32:20

标签: javascript

我在使用fetch理解变量和函数时遇到了一些问题。 我试图传递来自

的响应值
.then(response => response.json())

.then(lang => response['lang'].slice(-2)

但是我收到了未定义的变量响应错误,所以我没有正确引用变量。调用它的正确方法是什么?

另外我想调用两个控制台日志,下面的代码片段当前会这样做,但我认为我不应该覆盖响应函数,我可以自己调用没有参数的函数或命令吗?

.then(response => console.log(response['text']) & console.log(food))

console.log(response ['text'])& console.log(食物)

  fetch("https://localhost:8000", {method:"POST", body:fd})
  .then(response => response.json())
  .then(lang => response['lang'].slice(-2))
  .then(food => "Temporary")
  .then(function detectType(lang) {
  switch(lang) {
    case 'abc':
        food = "Bananas";
        break;
    case 'def':
        food = "Apples";
        break;
    default:
        food = "Bananas";
        break;
   }})
  .then(response => console.log(response['text']) & console.log(food))
  .catch(err => console.error(err));
}

2 个答案:

答案 0 :(得分:2)

如果我理解你想做什么,请记住一个函数的返回值是下一个函数接收的状态。所以你想要做更像这样的事情:

fetch("https://localhost:8000", {method:"POST", body:fd})
  .then(response => response.json())
  .then(response => {
    response['lang'] = response['lang'].slice(-2);
    return response;
  })
  .then(response => {
    response['food'] = "Temporary";
    return response;
  })
  .then(function detectType(response) {
    switch(response['lang']) {
      case 'abc':
          response['food'] = "Bananas";
          break;
      case 'def':
          response['food'] = "Apples";
          break;
      default:
          response['food'] = "Bananas";
          break;
     }
    return response;
  })
  .then(response => {
    console.log(response['text']);
    console.log(response['food']);
  })
  .catch(err => console.error(err));
}

答案 1 :(得分:2)

关于fetch(),请记住它非常“承诺沉重”。

fetch("https://localhost:8000", {method:"POST", body:fd})会返回一个Promise,您可以使用第一个then()

处理

then(response => response.json())返回response.json()会在下一个response.json()中显示.then()状态。因此,您可以通过下一个then()访问响应的JSON表示。

让我们来看看它应该是什么样子:

fetch("https://localhost:8000", {method:"POST", body:fd}) 
  .then(response => response.json()) 
  .then(jsonResp => jsonResp['lang'] ); 

通过最后一行,您可以检查JSON对象及其键,而无需关闭Promise链。如果您想查看lang属性,则可以按照示例中的方式访问该属性。

希望这有帮助!