Express Promisify Joi:未定义编译

Express Promisify Joi:未定义编译,express,joi,Express,Joi,我想答应你 最初的功能是: Joi.validate(message, schema, (err, success) => {}) 我试着做: const Joi = require('joi'); const Promise = require('bluebird'); const validate = Promise.promisify(Joi.validate); 我打电话给你: validate(message, schema) .then(() => console.l

我想答应你

最初的功能是:

Joi.validate(message, schema, (err, success) => {})
我试着做:

const Joi = require('joi');
const Promise = require('bluebird');
const validate = Promise.promisify(Joi.validate);
我打电话给你:

validate(message, schema)
.then(() => console.log('ok'))
.catch(err => console.log('ERRRR', err.message));
但我收到了这个错误:

Cannot read property 'compile' of undefined
你知道我怎样才能做到吗?
谢谢

问题在于,在承诺过程中,上下文丢失了。所以试试这个:

const validate = Promise.promisify(Joi.validate).bind(Joi);
validate(message, schema)
  .then(() => console.log('ok'))
  .catch(err => console.log('ERRRR', err.message));
或者这个:

const pJoi = Promise.promisifyAll(Joi);
pJoi
  .validate(message, schema)
  .then(() => console.log('ok'))
  .catch(err => console.log('ERRRR', err.message));

问题在于,在承诺过程中,语境丢失了。所以试试这个:

const validate = Promise.promisify(Joi.validate).bind(Joi);
validate(message, schema)
  .then(() => console.log('ok'))
  .catch(err => console.log('ERRRR', err.message));
或者这个:

const pJoi = Promise.promisifyAll(Joi);
pJoi
  .validate(message, schema)
  .then(() => console.log('ok'))
  .catch(err => console.log('ERRRR', err.message));

共享完整错误堆栈共享完整错误堆栈