在protractor.js中,

我有承诺/推迟的功能。例如

var myFunc = function(_params) {
  var deferred = protractor.promise.defer();
  /***do magical code things****/
  /***wait for other promises***/
  /*****deferred.fulfill();*****/
  return deferred.promise;
};


我可以使用哪种类型的typeof语句组合检查此事物(传递给其他事物时)是否有希望?


typeof promiseMaybe === 'function'
typeof promiseMaybe.then === 'function'


&&已与先前?



还是有非typeof函数,例如...


promiseMaybe.isThenable
protractor.promise.isThenable(promiseMaybe)


澄清度

我有一个方法将接收myFunc作为参数,但是该方法也可以接收字符串和查找器。我需要知道如何在调用函数之前就知道参数是否为承诺的函数。

最佳答案

在量角器中有一个辅助方法-protractor.promise.isPromise()

var el = element(by.css('foo'));

protractor.promise.isPromise('foo'); // false
protractor.promise.isPromise(el); // false
protractor.promise.isPromise(el.click()); // true


量角器直接从selenium-webdriverhere you can find the source code of the method采用此方法:

/**
 * Determines whether a {@code value} should be treated as a promise.
 * Any object whose "then" property is a function will be considered a promise.
 *
 * @param {*} value The value to test.
 * @return {boolean} Whether the value is a promise.
 */
promise.isPromise = function(value) {
  return !!value && goog.isObject(value) &&
      // Use array notation so the Closure compiler does not obfuscate away our
      // contract. Use typeof rather than goog.isFunction because
      // goog.isFunction accepts instanceof Function, which the promise spec
      // does not.
      typeof value['then'] === 'function';
};


因此,基本上任何具有then方法的对象都被视为Promise。

07-27 13:47