Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:Promise解析器不是一个函数_Javascript_Reactjs_Jestjs - Fatal编程技术网

Javascript JS:Promise解析器不是一个函数

Javascript JS:Promise解析器不是一个函数,javascript,reactjs,jestjs,Javascript,Reactjs,Jestjs,我试图运行这个jestJS单元测试,但我确实得到了TypeError:Promise resolver undefined不是一个函数。我做错了什么 it('_onSubmit() should throw error if data is missing', (done) => { const createUserMutation = () => new Promise() const wrapper = shallow(<CreateAccount createUs

我试图运行这个jestJS单元测试,但我确实得到了
TypeError:Promise resolver undefined不是一个函数。我做错了什么

it('_onSubmit() should throw error if data is missing', (done) => {
  const createUserMutation = () => new Promise()
  const wrapper = shallow(<CreateAccount createUserMutation={createUserMutation} />)
  wrapper.update().find(Form).simulate('submit', {
    preventDefault: () => {}
  })
  createUserMutation.resolve().then(() => {
    expect(console.error).toHaveBeenCalled()
    done()
  })
})
it(''u onSubmit()如果数据丢失,则应抛出错误',(完成)=>{
const createUserMutation=()=>newpromise()
常量包装器=浅()
wrapper.update().find(Form).simulate('submit'{
preventDefault:()=>{}
})
createUserMutation.resolve()。然后(()=>{
expect(console.error).toHaveBeenCalled()
完成()
})
})
新承诺()
正在尝试创建一个没有执行器函数*的承诺。正确的用法是传入一个函数,该函数最多可接受两个参数(
resolve
reject
),例如:

有关MDN的更多信息:

稍后,您似乎试图在promise实例上调用
resolve
。你也不能这样做(除非你没有使用标准承诺)。使用传递给执行器的
resolve
函数解析承诺。(我试图为您修改代码,但需要太多上下文信息。)



*我很惊讶地看到V8的错误消息说“resolver function”,但我已经验证了它的正确性。将其称为执行器,我本以为“解析器函数”将是
Promise
构造函数作为第一个参数传递给它的函数…

如果您只想创建一个已解析的Promise,那么使用
Promise.resolve()
,它将返回一个新的、已解析的Promise

newpromise()
用于将非承诺(通常是异步的)代码转换为承诺,但在这里似乎不需要。如果要使用它,就必须向其中传递一个函数(正如Felix Kling和TJ Crowder已经指出的)

还有几点:

  • 您正在将
    createUserMutation
    定义为一个函数,因此几行之后使用它时,您需要使用
    ()
    调用它。或者你可以选择让它不是一个函数,因为你在这里所要做的就是产生一个承诺
  • 此外,正如Felix Kling所指出的,承诺没有
    resolve()
    方法。您只需调用
    promise.resolve()
    生成的承诺即可

承诺构造函数需要一个函数。promise实例没有
resolve
方法。我一直在努力弄清楚这个测试应该如何工作。你能告诉我们产生这段代码的思想过程吗?你想用承诺做什么?你为什么在这里用承诺?代码的哪一部分是异步的?但我不明白如何将
resolve().then()
转化为承诺…@user3142695:恐怕我不能理解你的代码。通常,所有操作都发生在承诺执行器内部,但在您的情况下,它包含在一个箭头函数中;如果不了解您的项目,我恐怕无法真正解释如何更新代码。请参阅链接文章(我添加了第二篇),了解有关如何使用承诺的更多信息。不过。FWIW,作为你的第一个要点,我怀疑这是正确的:她/他正在传递函数,而不是它的结果,作为一个道具(可能是为了在改变用户时调用它)。(但显然,我们需要更多的上下文来确定这两种情况。)
var p = new Promise((resolve, reject) => {
    // ...code that does something, ultimately calls either resolve or reject
});