【发布时间】:2017-08-29 02:15:00
【问题描述】:
我目前正在学习 JavaScript promise。
我被告知,如果一个对象/函数本身包含一个名为 then(..) 的成员函数,那么该对象/函数将被识别为 promise like object,无论该对象/函数是真正的 promise 对象还是不是。
所以我想出了以下代码。
var aPromise = new Promise(function (resolve, reject){});
aPromise instanceof Promise; //prints true in chrome console
var a = {
then: function(){}
};
a instanceof Promise;
但是a instanceof Promise 在 chrome 控制台中执行后,false 被打印出来了。
为什么会这样?是我做错了什么,还是我对什么是类 Promise 对象的理解不正确?
【问题讨论】:
-
“Promise-like object”意味着尽管 不是
a instanceof Promise,a可以被视为一个承诺。 -
我认为这意味着它将像一个承诺一样行事,但不一定是它的一个实例。因为它的行为就像一个,但实际上仍然只是一个对象。
-
it will act like a promise- 希望,因为不能保证.then函数必须做任何类似的承诺:p -
任何不是 Promise 的东西都会导致
a instance Promise为 false ...即使是那些没有.then...instanceof的也不关心 thenables -
instanceof 顾名思义测试一个对象是否是某个构造函数的实例。由于您的
a不是由 Promise 构造函数创建的,也不是从它继承的函数,因此它不是它的实例。如果您想测试“promise like”或“thenable”,请测试then、if('then' in a)
标签: javascript asynchronous promise