【发布时间】:2016-01-21 17:22:34
【问题描述】:
我在尝试 ES2015 Promises 时遇到了奇怪的问题:
var webdriver = require('webdriverio');
(new Promise(function (resolve, reject) {
var client = webdriver.remote({desiredCapabilities: {browserName: 'chrome'}}).init();
client.then(function () {
console.log(typeof client.end); // outputs "function"
resolve(client)
}).catch(function (e) {
reject(e);
});
})).then(function (client) {
console.log(typeof client.end); // outputs "undefined"
}).catch(function (e) {
console.log(e);
});
在上面的代码中,当我解析client 时,会发生某种魔术。在调用 resolve 之前,客户端包含 state=fulfilled 和 value 属性,以及 then、end、click、waitForExist 等方法。但在回调中,我只收到原始客户端对象的 value 属性作为参数。我的问题很简单,ES2015 Promise 在解析此类对象时执行了什么样的巫术?
与这种奇怪的行为相反,调用 resolve({client}) 按预期工作 - then((result) => result.client.end())
【问题讨论】:
-
所以你的
client是一个thenable? -
@Bergi 是的,是的。我明白了,这只是为了举例。我真的很感兴趣为什么会有这样的行为。
-
如果只是为了问题,使用
Promise.resolve(client)将具有相同的行为 -
我不确定我是否完全理解您想知道的内容。您是否对究竟发生了什么,或者为什么会发生这种情况感兴趣?如果是后者,看看stackoverflow.com/q/29435262/1048572,stackoverflow.com/a/30852423/1048572,stackoverflow.com/a/31327725/1048572
标签: javascript es6-promise webdriver-io