编写async / await版本的回调

时间:2017-10-26 22:30:03

标签: node.js async-await kurento

我尝试将callback重写为async/await,但是以下代码无法正常工作并导致评论行处于高CPU状态。

const kurento = require('kurento-client')

function getKurentoClient (kmsUrl) {
  return new Promise((resolve, reject) => {
    kurento(kmsUrl, (error, kurentoClient) => {
      if (error) {
        return reject(error)
      } else {
        return resolve(kurentoClient) // never returns
      }
    })
  })
}

async function test () {
  let result = await getKurentoClient('ws://localhost:8888/kurento')
  console.log('done')
}

test()

1 个答案:

答案 0 :(得分:3)

来自mozilla.org website

  

Promise.resolve(value)方法返回一个使用给定值解析的Promise对象。 如果该值是一个可用的(即具有“then”方法),则返回的promise将“跟随”那个,采用其最终状态;如果值是promise,则该对象成为对Promise.resolve的调用的结果;否则返回的承诺将用值来实现。

来自bluebird GitHub

  

当promises使用then(又名then ables(例如_kurentoClient)解决其他承诺或内容时,他们必须等待then本身

正如您所猜测的那样,kurento客户端具有then功能(因此是可行的),因此Promise正试图解决它。因为一个错误(或者不是一个错误。老实说,我没有足够的研究来确定它)它会永远地解决它自己。

据我所知,似乎this kurento commit试图修复它,解决为“不可饶恕”。我看到提交来自31 Oct 2016,但最新版本来自Sep 2016,所以我认为未部署修复版本。