无论是ES6承诺还是蓝鸟承诺,Q承诺等等。
我如何测试,看看一个给定的对象是一个承诺?
无论是ES6承诺还是蓝鸟承诺,Q承诺等等。
我如何测试,看看一个给定的对象是一个承诺?
当前回答
const isPromise = (value) => {
return !!(
value &&
value.then &&
typeof value.then === 'function' &&
value?.constructor?.name === 'Promise'
)
}
对我来说,这张支票更好,试试吧
其他回答
if (typeof thing?.then === 'function') {
// probably a promise
} else {
// definitely not a promise
}
我用这个函数作为通用解:
function isPromise(value) {
return value && value.then && typeof value.then === 'function';
}
这是https://github.com/ssnau/xkit/blob/master/util/is-promise.js的代码
!!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
如果一个对象具有then方法,它应该被视为Promise。
这并不是完整问题的答案,但我认为值得一提的是,在Node.js 10中添加了一个名为isPromise的新util函数,它可以检查对象是否为本机Promise:
const utilTypes = require('util').types
const b_Promise = require('bluebird')
utilTypes.isPromise(Promise.resolve(5)) // true
utilTypes.isPromise(b_Promise.resolve(5)) // false
it('should return a promise', function() {
var result = testedFunctionThatReturnsPromise();
expect(result).toBeDefined();
// 3 slightly different ways of verifying a promise
expect(typeof result.then).toBe('function');
expect(result instanceof Promise).toBe(true);
expect(result).toBe(Promise.resolve(result));
});