我觉得应该为JavaScript变量制定一个命名约定,让它们持有 承诺. 我一般不喜欢也不提倡超出编程语言标准的命名惯例,但在承诺作为函数参数传来传去的编程风格中,往往很难一目了然地分辨出一个变量所承载的是承诺还是 "真东西"。
我个人曾用过 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
那么,我可能会建议将承诺命名为现在时态动词... ...
但是,如果你正在构建一个依赖于递延对象的库的话
// accepts a promise
var showImage = function (promise) {
promise.done(function (img) { /* ...... */ });
};
那么把变量命名为名词也没有什么特别的问题,只要了解哪些方法采取承诺,哪些不采取承诺。
var image = loadImage(url); // returns promise
showImage(image); // acts on promise
现在你的接口真的很干净,你可以写出看起来100%程序化的代码......buuuut,你需要知道哪些函数方法使用承诺,哪些使用对象。
如果你把承诺作为回调传递到对象方法里面,那么你可以很高兴地把它们命名为 promise
或 tweetLoading
或 dataParsing
或任何在该特定情况下有意义的东西。
关于 showImage
,我选择的参数是平铺直叙,叫做 promise
,这样如果你在做那个函数的工作,或者你需要调试一连串的东西,你可以一看就知道它取了一个承诺对象。
我不知道有什么公开的约定,但是在我自己的代码中使用了以下的方式。
var dfrd
延迟对象(我不记得曾经在同一个作用域中需要两个或更多的对象)。var p
:承诺var p_foo
承诺:数个命名的承诺之一var promises
承诺:一个包含承诺的数组或普通对象例外的是 jqXHR
对象,我将其命名为 var jqXHR
(同样,我不记得曾经在同一范围内需要两个或更多)。