【问题标题】:How to not use the first parameter of a method call and still pass JSLint?如何不使用方法调用的第一个参数并仍然传递 JSLint?
【发布时间】:2014-08-10 18:57:29
【问题描述】:

我不得不调用一个带有两个参数的方法,但我只使用了第二个。我的代码如下所示:

  function trapEvent(resolve, reject) {

    event_callback = function (evt) {
      evt.stopPropagation();
      if (allowDefault !== true) {
        evt.preventDefault();
      }
      cancelResolver();
      callback_promise = new Promise()
        .cancellable()
        .then(function () {
          return callback(evt);
        })
        .then(null, function (error) {
          if (!(error instanceof Promise.CancellationError)) {
            canceller();
            reject(error);
          }
        });
    };

    util.startListenTo(target, type, event_callback, useCapture);
  }

  return new Promise(trapEvent, canceller);

由于我将我的事件“锁定”在一个只能被拒绝或取消的承诺中,因此我从不使用 JSlint 理所当然地抱怨的 resolve 方法。但是根据MDN es6 Promise spec,我需要在Promise回调方法中同时提供resolvereject

问题:
如何在保留resolve 的同时使此方法通过?

【问题讨论】:

  • 当你以这种方式引用函数时,你必须按照你的方式使用这两个参数,这没有什么问题,只需忽略 jslint。
  • 嗯。还有其他方法吗?
  • 可以声明为全局变量
  • 我刚用谷歌搜索了一下,马上就找到了答案。
  • @cookiemonster - 那为什么不发布呢?

标签: javascript methods parameters promise jslint


【解决方案1】:

我认为最好的方法是更新您的 jshint.json 文件并将其配置为允许。

“未使用”属性是您要查找的属性。可以对其进行调整以包含以下值:

  • false - 不检查未使用的变量
  • true - "vars" + 检查最后一个函数参数
  • "vars" - 跳过检查未使用的函数参数
  • "strict" - "vars" + 检查所有函数参数

在我看来,它目前已设置为“严格”。您可能希望将其更改为 true 或“vars”。后者对于您不想调用拒绝回调而只调用解析方法的情况很有用。

如果您只想为给定的行完全禁用 jshint,您可以执行以下操作:

function trapEvent(resolve, reject) { //jshint ignore:line

【讨论】:

  • 你是对的。一个角色可以带来什么不同:-)
【解决方案2】:

是的,对于 jslint,您正在寻找的是 unparam -- /*jslint unparam: true*/

这里是上下文。我猜是全局变量等,我假设您稍后会在某处使用callback_promise。注意第一行末尾的unparam

/*jslint white:true, sloppy:true, unparam: true */
/*global allowDefault, cancelResolver, callback, canceller, util, target, type, useCapture */

function trapEvent(resolve, reject) {
    var event_callback, callback_promise;

    event_callback = function (evt) {
      evt.stopPropagation();
      if (allowDefault !== true) {
        evt.preventDefault();
      }
      cancelResolver();
      callback_promise = new Promise()
        .cancellable()
        .then(function () {
          return callback(evt);
        })
        .then(null, function (error) {
          if (!(error instanceof Promise.CancellationError)) {
            canceller();
            reject(error);
          }
        });
    };

    util.startListenTo(target, type, event_callback, useCapture);
    // ... assuming you're using callback_promise later
}

[曾经有]其他稍微时髦的方法来解决这个问题,例如在函数中使用 arguments 属性,您可以将两个参数完全排除在函数定义之外,然后提取现在的 @987654328进入代码后@out。

/*jslint white:true, sloppy:true, browser:true */
function trapEvent() {
    var reject = arguments[1];
    reject();
}

var fnTest = function () { window.alert("Used"); };
trapEvent("unused", fnTest);

.. 但老实说,这真的很 hacky。现在我测试了这一点,谢天谢地,最新版本的 JSLint(可能是关闭了意外漏洞starting July 3rd of last year?)不再接受它。

我建议使用unparam,但仅限于您出于某种原因无法控制函数签名的文件中,如您在此处的用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多