Javascript 检查对象是否是有前途的函数 在paragrator.js中,

Javascript 检查对象是否是有前途的函数 在paragrator.js中,,javascript,types,selenium-webdriver,promise,protractor,Javascript,Types,Selenium Webdriver,Promise,Protractor,我有承诺/推迟的职能。比如说 var myFunc = function(_params) { var deferred = protractor.promise.defer(); /***do magical code things****/ /***wait for other promises***/ /*****deferred.fulfill();*****/ return deferred.promise; }; 我可以使用什么类型的typeof语句组合来检查这

我有承诺/推迟的职能。比如说

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'
  • promiseMaybe.then的类型===“函数”
    • &&
      'ed与先前的
或者是否有一个非类型的函数,如

  • promiseimable.isThenable
  • 量角器.允诺.可兑现(允诺)
澄清
我有一个方法可以接收
myFunc
作为参数,但是这个方法也可以接收字符串和查找器。在调用函数之前,我需要知道如何判断参数是否是承诺的函数。

在量角器中有一个用于该函数的助手方法-
量角器.promise.isPromise()

量角器直接从selenium webdriver中获取此方法:


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

您想检查函数,还是它返回什么?我想检查函数。我有一个方法将调用
browser.wait(maybespromise)
,我想知道该方法是否收到了一个有希望的函数作为参数还是需要转换的字符串。这是您需要区分的唯一两个选项(函数还是字符串)?那要简单得多。(是的,确定一个函数是否返回承诺是不可能的,因为您可以创建一个有时只返回承诺的函数。)我支持我可以假设,如果它接收到一个函数,它一定是一个有承诺的函数。这不是我想做的假设,我仍然想知道这是否可以区分。我在括号里说了这一点,为什么不可以。调用它时,您不能检查它的返回值吗?
var el = element(by.css('foo'));

protractor.promise.isPromise('foo'); // false
protractor.promise.isPromise(el); // false
protractor.promise.isPromise(el.click()); // true
/**
 * 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';
};