2016-02-27 251 views
3

我写的JavaScript这样的:Promise.promisify不是函数

var keys=null; 
var promise=Promise.promisify(alchemyapi.keywords("url",myUrl,{},function(response) { 
    var keywords = { url:myUrl, response:JSON.stringify(response,null,4), results:response['keywords'] }; 
       return keywords; 
      })); 
promise.then(
       (result)=>{ 
        var keys=result; 
        console.log(keys); 
       }, 
       (error)=>console.log(error) 
      ); 

我使用AlchemyAPI并试图保存数据我进入我的数据库 我应该怎么办?

+2

除非你使用的是Promise库,比如Bluebird,没有'Promise.promisify'? – adeneo

+0

你在使用蓝鸟吗? 'Promise.promisify'确实将一个函数作为参数,并返回另一个函数。你不应该把它传递给调用的结果,特别是如果它什么都不返回的话。 – Bergi

回答

3

您应该能够使用Promise通过删除不是内置的Promise方法的.promisify来返回预期结果;代传递keywordsresolvePromise构造函数中的return

var keys = null 
, promise = new Promise(function(resolve) { 
    alchemyapi.keywords("url", myUrl, {}, function(response) { 
     var keywords = {url: myUrl 
         , response: JSON.stringify(response,null,4) 
         , results:response['keywords'] 
        }; 
     resolve(keywords); 
     // error handling ? 
    }) 
    }).then(function(result) { 
     keys = result; 
     console.log(keys) 
    }, function(err) { 
     console.log(err) 
    }) 
1

对于没有蓝鸟更一般Promise.promisify功能,我结束了写这个:

function promisify(func) { 
    return function promiseFunc(options) { 
     return new Promise(function executor(resolve, reject) { 
      func(options, function cb(err, val) { 
       if (err) { 
        return reject(err); 
       } else { 
        return resolve(val); 
       } 
      }); 
     }); 
    } 
} 

希望别人认为这是很有帮助的,但在大多数情况下,这可能值得导入蓝鸟。