【问题标题】:Is .concat() method used wrongly here?.concat() 方法在这里用错了吗?
【发布时间】:2018-11-23 11:45:10
【问题描述】:

所以,我有两个 ajax 调用,它们链接在一个 Promise 中。

例如

promiseData.then(res1, res2) {
 let responseOneParsed = JSON.parse(res1)
 let responseTwoParsed = JSON.parse(res2)
}

我将这两个连接起来,像这样

concatenatedArr = responseOneParsed.data.concat(responseTwoParse.data)

所以,这很清楚。 但是,有时这两个 ajax 调用之一返回 undefined,因为响应是空的(应该是),我得到错误:

  error  TypeError: Cannot read property 'concat' of undefined

这又很清楚,但是如果另一个是undefined,我如何缩放此代码以接受这些参数之一,所以它不会失败? .concat() 这里用错了吗?

【问题讨论】:

  • 来个基本的检查怎么样,比如if (responseOneParsed.data) ...
  • 我理解为什么会发生这种情况@JonathanLonowski,但需要检查这种情况..
  • 第二个响应未定义时不会出错,因为它作为参数传递给函数,它没有调用函数。当我们使用未定义的值调用函数时,我们会收到问题中提到的错误。
  • 当结果为空时让API返回[],这样代码就一直有效。
  • @ChrisG,我不能 API 来自第三方。如果未定义,则根本不是返回数组,而是返回对象。

标签: javascript jquery html arrays promise


【解决方案1】:

您可以使用|| 运算符和empty array: [] 轻松实现

像这样 concatenatedArr = (responseOneParsed.data || []).concat(responseTwoParse.data || [])

【讨论】:

【解决方案2】:

这不只是适当的健全性检查吗?

检查responseOneParsed.data是否有效,如果有效,调用concat,否则,应用第二个数据。

 concatenatedArr = responseOneParsed.data ? 
   responseOneParsed.data.concat(responseTwoParse.data ? responseTwoParse.data: [] )
   :responseTwoParse.data

【讨论】:

  • 是双向街道,responseTwo也可以不定义,不只是responseOne
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2020-12-12
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多