javascript JS:承诺解析器不是函数

p8ekf7hl  于 2022-12-02  发布在  Java
关注(0)|答案(3)|浏览(121)

我试着运行这个jestJS单元测试,但是我得到了TypeError: Promise resolver undefined is not a function。我做错了什么?

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()
  })
})
e0bqpujr

e0bqpujr1#

new Promise()正在尝试创建一个没有执行函数 * 的承诺。正确的用法是传入一个最多接受两个参数(resolvereject)的函数,例如:

var p = new Promise((resolve, reject) => {
    // ...code that does something, ultimately calls either resolve or reject
});

关于MDN的更多信息:

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

  • 我很惊讶看到V8的错误信息说“resolver function”,但我已经验证过了。规范称它为执行器,我本以为“resolver functioN”应该是Promise构造函数作为第一个参数传递给它的函数...
8dtrkrch

8dtrkrch2#

如果您只想创建一个已解决的承诺,则使用Promise.resolve(),它将返回一个新的已解决的承诺。
new Promise()用于将非承诺(通常是异步的)代码转换为承诺代码,但看起来这里并不需要它。如果要使用它,必须向其中传递一个函数(正如Felix Kling和TJ Crowder已经指出的)。
更多要点:

  • 你把createUserMutation定义为一个函数,所以在后面的几行中,当你使用它的时候,你需要用()来 * call * 它,或者你可以选择让它不是一个函数,因为你在这里所做的似乎只是产生一个承诺。
  • 而且,正如Felix Kling所指出的,promise没有resolve()方法,你可以在Promise.resolve()产生的promise上调用.then()
w8ntj3qf

w8ntj3qf3#

在我的例子中,使用TypeScript之类的类型是一个问题。

const a = new Promise<any>((resolve, reject) => {})

这在JavaScript中是不可接受的,并且它会显示错误“Promise resolver is not a function”(Promise解析器不是一个函数)。

const a = new Promise((resolve, reject) => {})

相关问题