调用asyc等待时,undefined不是函数

时间:2018-03-25 08:47:13

标签: javascript node.js async-await

请查看我的代码,我无法找到代码中的错误。

async makeSale({request,response,auth,params})
{
 const data=request.body.data
 var total=0
 _.forEach(data,(v)=>{
    total+=(v.productQuantity*v.productPrice)

})
  const saleData={seller_id:1, buyer_id:params.id,totalAmount:total}
  const [sale,config] = await Promise.all(this.createSale(saleData),this.getsConfig())
} 

这些是两种方法

createSale(s)
{
  console.log('One: '+new Date().getTime())
  const d=Sale.create(s)
  console.log(d) // this echo promise pending 
  return d
}
getsConfig()
{
  console.log('two: '+new Date().getTime())
  const c=Config.all()
  console.log(c) // this echo promise pending 
  return c
}

,控制台中的结果是

One: 1521967277914
Promise { <pending> }
two: 1521967277916
Promise { <pending> }

,错误是 "undefined is not a function", name: "TypeError", status: 500

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

我认为问题在于this.createSale(saleData).interate不是函数。

根据MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

Promise.all接受&#34;可迭代&#34;作为参数,iterable可以是Array或String。

你的结果:

One: 1521967277914
Promise { <pending> }

显示了函数d:createSale()是一个Promise但可以互动(String或数组)。

createSale(s)
{
  console.log('One: '+new Date().getTime())
  const d=Sale.create(s)
  console.log(d) // this echo promise pending 
  return d
}

所以,也许您可​​以尝试以下代码:

await Promise.all([this.createSale(saleData),this.getsConfig()])

答案 1 :(得分:-1)

这是因为Promise.all正在等待createSale和getsConfig被解决而且它们不是承诺所以只需为它们创建一个承诺,如下所示

createSale(s)
{

  return new Promise(function(resolve, reject) {
     console.log('One: '+new Date().getTime())
     const d=Sale.create(s)
     console.log(d) // this echo promise pending 
     resolve(d)
  });

}

并为getsConfig做同样的事情