【发布时间】:2019-12-27 01:48:21
【问题描述】:
我想使用库 astro-js,他们的文档中的典型调用如下所示:
const aztroJs = require("aztro-js");
//Get all horoscope i.e. today's, yesterday's and tomorrow's horoscope
aztroJs.getAllHoroscope(sign, function(res) {
console.log(res);
});
出于多种原因,我想使用 async/await 样式并利用 try/catch。所以我尝试了这样的承诺:
const aztroJs = require("aztro-js");
const {promisify} = require('util');
const getAllHoroscopeAsync = promisify(aztroJs.getAllHoroscope);
async function handle() {
let result, sign = 'libra';
try {
result = await getAllHoroscopeAsync(sign);
}
catch (err) {
console.log(err);
}
console.log("Result: " + result);
}
但是,当我记录结果时,它是未定义的。我知道调用有效,因为库会通过 console.log 自动记录响应,并且我在日志中看到了正确的响应。
我怎样才能“等待”这个电话? (即使通过其他方式,如果这个不是“可承诺的”)
【问题讨论】:
-
promisify需要一个回调,其中第一个参数是错误。 -
a) 确保正确获取方法的
this上下文 b) 确保该方法符合 nodeback 约定。 -
const getAllHoroscopeAsync = promisify((sign, cb) => { aztroJs.getAllHoroscope(sign, res => { cb(null, res); }); });应该可以工作。 -
您的代码似乎没问题..您如何调用您的句柄方法??
标签: javascript node.js promise node-promisify