首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数工作,但当util.promisify()使用?

函数工作,但当util.promisify()使用?
EN

Stack Overflow用户
提问于 2017-07-12 17:44:10
回答 1查看 5.5K关注 0票数 19

我有一些使用节点-bing-api的代码。-它是错误的,并且工作非常完美的,但我想把它转换成使用承诺(和await)。

我使用节点8和util.promisify。在下面的代码中,Bing.web是常规的错误优先代码,而searchBing是promisified。

代码语言:javascript
运行
复制
var findParentDir = require('find-parent-dir'),
    configDir = findParentDir.sync(__dirname, 'config.js'),
    config = require(configDir+'config.js'),
    util = require('util'),
    log = console.log.bind(console),
    Bing = require('node-bing-api')({ accKey: config.cognitiveServices.bingSearch }),
    searchBing = util.promisify(Bing.web);

var start = async function(){
    // This fails
    // var searchResultsRaw = await searchBing('windows', {top: 5})
    // log(searchResultsRaw)

    // This works
    Bing.web('windows', {top: 5}, function(err, searchResultsRaw){
        log(searchResultsRaw)
    })
};

start();

promisified失败的有:

代码语言:javascript
运行
复制
(node:1752) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: this.searchVertical is not a function

这是节点-bing-api中的一个错误。但是,util.promisify不应该使用与原始函数相同的参数,无缝地将选项传递给真正的bing.web吗?

为什么这个函数在编程时不能工作?

注意,我可以制作我自己的promisifed版本--它可以工作--但是我不想创建额外的代码:

代码语言:javascript
运行
复制
var searchBing = function(){
  return new Promise(function(resolve, reject) {
    Bing.web('windows', {top: 5}, function(err, searchResults){
      if ( err ) {
        reject(err)
        return
      }
      resolve(searchResults)
    })
  })
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-12 17:48:29

它可能缺少上下文:函数Bing.web在其体内使用this,在使用util.promisify时不绑定到Bing

您需要通过以下方法显式地绑定它:

代码语言:javascript
运行
复制
searchBing = util.promisify(Bing.web.bind(Bing));
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45064380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档