【问题标题】:Why is this function definition ignored? [closed]为什么忽略此函数定义? [关闭]
【发布时间】:2020-12-17 04:38:06
【问题描述】:

谁能弄清楚我为什么会得到

TypeError: getStatusCode(...) is not a function

我什么时候做?

const getStatusCode = require('./getStatusCode')
tmpStatus = await getStatusCode({url: url, timeOut: to, maxRedirects: mr})
(tmpStatus === alert['Check']['Status_code'] ) ? isOk = 1 : isOk = 0

如果我删除最后一行,我检查tmpStatus 中的值,问题就会出现。

getStatusCode.js

const axios = require('axios')
const qs = require('qs')

module.exports = async function(options) => {
  options              = options || {}
  options.url          = options.url || {}
  options.string       = options.string || null
  options.timeOut      = options.timeOut || 1000
  options.maxRedirects = options.maxRedirects || 0

  try {
    const response = await axios.get(options.url, {
      timeout: options.timeout,
      maxRedirects: options.maxRedirects,
      validateStatus: null,
      transformResponse: [function (data) {
        return data.search(options.string)
  }],
    })
    return await response.data
  } catch (error) {
    return -1
  }
}

【问题讨论】:

  • console.log(typeof getStatusCode) 显示什么?
  • 当我运行该代码时,它会抛出 SyntaxError: Unexpected token '=>'
  • async function(options) => 没有意义 - 你在写哪种函数?
  • 当我修复该错误时,它运行良好。我无法重现该问题。
  • @Barmar 它返回function...

标签: javascript node.js ecmascript-6


【解决方案1】:

尝试删除=>

const axios = require('axios')
const qs = require('qs')

module.exports = async function(options) {
  options              = options || {}
  options.url          = options.url || {}
  options.string       = options.string || null
  options.timeOut      = options.timeOut || 1000
  options.maxRedirects = options.maxRedirects || 0

  try {
    const response = await axios.get(options.url, {
      timeout: options.timeout,
      maxRedirects: options.maxRedirects,
      validateStatus: null,
      transformResponse: [function (data) {
        return data.search(options.string)
  }],
    })
    return await response.data
  } catch (error) {
    return -1
  }
}

【讨论】:

  • 我仍然遇到同样的错误。
  • 运行前是否重启了服务器?
【解决方案2】:

错误是因为您没有在分配行的末尾放置;。所以它被解释为好像你写的一样

tmpStatus = await getStatusCode({url: url, timeOut: to, maxRedirects: mr})(tmpStatus === alert['Check']['Status_code'] ) 
    ? isOk = 1 : isOk = 0;

这是试图使用getStatusCode() 的结果作为函数,tmpStatus === alert['Check']['Status_code'] 的值作为其参数。

What are the rules for JavaScript's automatic semicolon insertion (ASI)?

我建议您始终使用分号,而不是依赖于 ASI。

【讨论】:

  • 我不知道一个函数可以返回一个函数!当我谷歌nodejs return function from function时,我没有得到任何有意义的东西。你能给我一个链接吗?
  • davidwalsh.name/javascript-functions我通过谷歌搜索找到了很多答案javascript function returning function
  • require() 是一个函数,当你执行getStatusCode = require(...) 时它会返回一个函数。那么你怎么可能不知道一个函数可以返回一个函数呢?
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
  • 2019-10-14
  • 2016-09-19
  • 2011-12-15
相关资源
最近更新 更多