无论是ES6承诺还是蓝鸟承诺,Q承诺等等。
我如何测试,看看一个给定的对象是一个承诺?
无论是ES6承诺还是蓝鸟承诺,Q承诺等等。
我如何测试,看看一个给定的对象是一个承诺?
当前回答
角:
import { isPromise } from '@angular/compiler/src/util';
if (isPromise(variable)) {
// do something
}
J
其他回答
免责声明:更新OP不是一个很好的答案,是每个库,不会跨领域工作。改为检查。then。
这个基于规范的答案是一种测试承诺的方法,仅供参考。
Promise.resolve(obj) == obj &&
BLUEBIRD.resolve(obj) == obj
当它起作用时,是因为算法明确地要求Promise。当且仅当它是此构造函数创建的promise时,Resolve必须返回传入的确切对象。
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
}
角:
import { isPromise } from '@angular/compiler/src/util';
if (isPromise(variable)) {
// do something
}
J
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));
});