我觉得为存储JavaScript Promise 的变量制定一个命名规则会很有用。通常情况下,我不喜欢或提倡超出编程语言标准的命名规范,但在 Promise 作为函数参数传递的编程风格中,往往很难一眼看出变量是保存了 Promise 还是“真实的东西”。
个人使用过 promiseOfFoo
和 pFoo
,但前者有点啰嗦,后者让我想起了匈牙利命名法。
是否有常用的约定俗成的命名规则?
我觉得为存储JavaScript Promise 的变量制定一个命名规则会很有用。通常情况下,我不喜欢或提倡超出编程语言标准的命名规范,但在 Promise 作为函数参数传递的编程风格中,往往很难一眼看出变量是保存了 Promise 还是“真实的东西”。
个人使用过 promiseOfFoo
和 pFoo
,但前者有点啰嗦,后者让我想起了匈牙利命名法。
是否有常用的约定俗成的命名规则?
这更取决于你将如何使用它们,不是吗?
如果你的代码类似于:
var imageLoading = loadImage(url); // returns promise
imageLoading.done(showImage);
// imageLoading.done
// imageLoading.error
// imageLoading.then
// imageLoading.success
// imageLoading.fail
// ... whatever your library supports
那么,我建议给这个Promise起一个类似于现在时态的动词的名称...
但是,如果你正在构建一个依赖于延迟对象的库...
// accepts a promise
var showImage = function (promise) {
promise.done(function (img) { /* ...... */ });
};
只要明确哪些方法需要 Promise,哪些不需要,将变量命名为名词并没有什么特别的问题。
var image = loadImage(url); // returns promise
showImage(image); // acts on promise
现在你的接口非常干净,你可以编写看起来100%过程式的代码。 ...但是,你需要知道哪些函数/方法使用Promise,哪些使用对象。
如果你将Promise作为回调函数传递给对象方法中,那么你可以愉快地将它们命名为promise
、tweetLoading
或dataParsing
等,在特定情况下,取一个合适的名字即可。
对于showImage
的定义,我选择的参数直接称为promise
,这样,如果你需要修改该函数或者需要调试一系列的工作流程,你一眼就能看到它需要一个Promise对象。
dataParsing
)。通常,承诺是关于最终结果(数据)的,所以在这些情况下不太适用。我也喜欢将函数参数命名为promise
并从上下文中推断其含义的想法。这些都是好主意,但没有约定俗成。 - jevakallioelse
或continue
的抽象理解在乌尔都语中并不能真正翻译出来。我知道你的想法,是的,我很挑剔,但如果我们要摆脱语言惯例,为什么不回到汇编语言的位运算呢?“Promise”、“Future”、“Deferred”都做着类似的事情,并且都是基于英语的范例。 - Norguardint
、float
、double
、string
等时是有意义的,但是什么是通用的、强类型的promise
呢?而且它是一个promise
、一个deferred
、一个future
等吗,因为不同的语言/库有不同的构造,而我通常会自己编写...所以现在我们又回到了语言和构造在其自己的语言中具有意义的问题,所以写出易读的内容。 - Norguard我不知道有哪些公共约定,但是我在自己的代码中使用了以下标准:
var dfrd
: Deferred 对象(我从未在同一作用域中需要两个或更多)var p
: Promise 对象var p_foo
: 命名为某个特定用途的 Promise 对象之一var promises
: 包含 Promise 对象的数组或普通对象例外情况是 jqXHR
对象,我将其命名为 var jqXHR
(同样,我从未在同一作用域中需要两个或更多)。
fooPromise
怎么样? - jbabey-ing
结尾的动词,表示正在进行的过程:http://msdn.microsoft.com/en-us/library/windows/apps/hh464924.aspx - ejoubaud