【问题标题】:Correct way to use Notification API without needing a callback无需回调即可使用通知 API 的正确方法
【发布时间】:2015-03-15 18:11:55
【问题描述】:

Chrome Extension Notification API 有一个带有以下签名的 create 方法:

notifications.create(string notificationId, object options, function callback)

我实际上没有需要在通知完成时运行的回调,但如果我省略回调,它会引发错误:

响应 storage.get 时出错:错误:调用表单 notification.create(string, object, null) 与定义不匹配

很公平。我不会写很多 JavaScript。当我需要 noop 回调时,使用此 API 的最佳方式是什么?

【问题讨论】:

  • 传递一个空函数? notifications.create("idHere", {options:here}, function() {});
  • 优秀。这就是我的想法,但我想我最好确保这不是一种更惯用的方法。
  • 如果 API 无论如何都没有提供在不传递回调的情况下做同样的事情,那么你就会被回调。没什么大不了的。如果它是一个你不想打印的字符串,你会传递“”。在面向对象的世界中,您将使用空对象模式并传递一个在调用其方法时什么都不做的对象。
  • Iirc,使用其他一些 chrome api,您可以省略第三个参数:notifications.create ("idHere", object)
  • 注意:有一个 Chrome 错误,但它没有更新多年:code.google.com/p/chromium/issues/detail?id=163750

标签: javascript google-chrome-extension noop


【解决方案1】:

如果 API 强制你传递 some 函数,那么你可以只传递一个空的匿名函数:

notifications.create("idHere", {options:"something"}, function() {});

或者(特别是如果您需要在多个地方执行此操作)您可以明确定义自己的无操作函数:

function noop() {}

notifications.create("idHere", {options:"something"}, noop);
someOtherAPI.someMethod(noop);

【讨论】:

  • 我喜欢这个,除了调用函数noop()。如果他在多个地方执行此操作,则具有显式定义函数的好处是,当发现确实需要对回调执行某些操作时,您只需将代码放在一个地方。然而,一旦你这样做了,noop() 这个名字就变成了谎言。 notificationCallback() 并不完美,但比 noop() 好。
  • @CandiedOrange - 我推荐noop() OP 实际上想要 发生无操作。如果在多个地方使用noop(),然后需求发生变化,那么所有这些地方会有相同的新通用需求的可能性有多大? (如果他们确实 all 确实更改为相同的新要求,那么这就是我的 IDE 具有查找/替换功能的原因。)
  • 当他们有同样的新需求时,你给他们同样的名字。这是一个以新的视角出现的旧想法。您在此处推荐的noop() 是幻数的功能版本。顾名思义,它应该在您什么都不做的时候使用。在一个大型项目中广泛传播它,你会导致维护头痛。我谦虚地敦促你找到一个能反映上下文的更好的名字。
  • “什么都不做”不是一个神奇的数字。如果它是我的代码,一旦我发现“什么都不做”不再合适的地方,我会添加一个具有适当名称的全新函数,而将 noop 留给仍然没有操作的任何其他地方。在任何时候,我都不会将 noop() 函数更改为具有非空主体,除了评论 /* Do nothing - do not change */ 之外。 (话虽如此,我不记得 ever 在 JavaScript 项目中需要无操作函数 - 我使用的 API 都高兴地接受了 nullundefined 回调.)
猜你喜欢
  • 2015-03-12
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 2016-06-08
  • 2018-02-27
  • 1970-01-01
  • 2022-10-24
相关资源
最近更新 更多