this.app.service(...).create(...) 不是函数

this.app.service(...).create(...) is not a function

我尝试发出 api 请求两次,第一次有效,但第二次失败并出现以下错误。

{
    "name": "GeneralError",
    "message": "this.app.service(...).create(...) is not a function",
    "code": 500,
    "className": "general-error",
    "data": {},
    "errors": {}
}

result.class.js

/* eslint-disable no-unused-vars */
const errors = require('@feathersjs/errors');

exports.Submission = class Submission {
  constructor (options, app) {
    this.app = app;
  }

  async create (data, params) {
    if (Array.isArray(data)) {
      return Promise.all(data.map(current => this.create(current, params)));
    }

    let result = await this.app.service('result').create({ //<------------- It works
      sectionId: data.sectionId,
    })
    console.log(result) // <------------------------------------ able to show the value
    (data.sub_sections).map(async sub_section =>{
      (sub_section.questions).map(async question =>{
        let payload = {
          answerId: question.questionId
        }
        await this.app.service('result').create(payload) //<------------- It results in error 
      })
    })
    return data;
  }

};

似乎不​​是 this.app.service().create() 的第二次调用导致您看到的错误。

我猜报告的特定错误消息是在您没有 console.log() 语句时发生的。这是因为缺少分号。

let result = await this.app.service('result').create({ 
  sectionId: data.sectionId,
}) // no semi-colon here
(data.sub_sections).map(//..)

JavaScript 仅将换行符视为分号 - 即语句结束 - 如果下一个非空格字符不能解释为当前语句的延续。但在这种情况下,它可以 - 作为对前面 await 表达式结果的调用。

注意中间插入console.log()语句时,应该会遇到类似的问题:

console.log(...) is not a function

所以在这种情况下,只需手动添加一个分号即可。