承诺的JavaScript命名约定?

承诺的JavaScript命名约定?,javascript,naming-conventions,deferred,promise,Javascript,Naming Conventions,Deferred,Promise,我觉得为持有承诺的JavaScript变量建立命名约定会很有用。我通常不喜欢或提倡超越编程语言标准的命名约定,但在编程风格中,承诺作为函数参数传递,通常很难一眼就看出变量是承诺还是“真实的东西” 我个人使用过Promiseofoo和pFoo,但我发现前者有点冗长,后者让我想起了匈牙利语 有常用的约定吗?我不知道有公共约定,但在我自己的代码中使用了以下内容: var-dfrd:一个延迟对象(我不记得在同一范围内需要两个或更多) var p:承诺 var p_foo:几种命名承诺之一 var pr

我觉得为持有承诺的JavaScript变量建立命名约定会很有用。我通常不喜欢或提倡超越编程语言标准的命名约定,但在编程风格中,承诺作为函数参数传递,通常很难一眼就看出变量是承诺还是“真实的东西”

我个人使用过Promiseofoo和pFoo,但我发现前者有点冗长,后者让我想起了匈牙利语


有常用的约定吗?

我不知道有公共约定,但在我自己的代码中使用了以下内容:

  • var-dfrd
    :一个延迟对象(我不记得在同一范围内需要两个或更多)
  • var p
    :承诺
  • var p_foo
    :几种命名承诺之一
  • var promissions
    :包含promissions的数组或普通对象

例外情况是
jqXHR
对象,我将其命名为
var jqXHR
(同样,我不记得在同一范围内需要两个或更多)

这更多地取决于你将如何使用它们,不是吗

如果您的代码如下所示:

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
,因此如果您正在处理该函数,或者需要调试一系列内容,你看它的第二眼就可以看到它是一个承诺对象。

关于
fooPromise
?关于
Froomise
?作为我投票结束的额外理由:虽然肯定有惯例,这个问题很可能会引发很多关于单词和缩略语不同用法利弊的讨论,因此它没有一个单一的事实答案。但我仍然觉得这是一个很好的问题(只是可能不是这样),所以我很伤心。这就是为什么,+1也是如此。@JSteen,我意识到这个问题相对于SO格式的问题,但我希望,如果不是单一的事实,至少会有一个霸道的答案。不过,谢谢你的解释。这个问题不应该结束。问题不是“哪一个是最好的约定”,而是“是否有约定”。比如说,一旦谷歌JavaScript风格指南涵盖了这一点,事实上的答案将是“是”。+1。我喜欢现在分词的想法(“动词ing”),尽管它只适用于行动对承诺的意义很重要的情况(如
数据解析
)。通常承诺都是关于最终结果(数据),因此在这些情况下就不那么多了。我还喜欢将函数参数命名为promise,并根据上下文推断其含义。好主意,但没有约定。@fencliff承诺通常是关于最终结果的,但是订阅承诺的库API都集中在操作
tweet.done(callback)
loading.done(callback)
,因为延迟值的可用性取决于某种操作(即使只是在一段时间后进行投票)。这是非常普遍的。就约定而言,我真的看不到。写什么读起来好,而不是强制使用新的匈牙利语,或者采用
\u 00\p
前缀/后缀作为标准约定。更多的人将容易理解
加载。finished()
而不是
前缀X.done();
如果你想一想,用现在分词('loading','fetching','saving')命名,你实际上是在使用后缀约定(“ing”)而不是前缀约定(“p_u”或其他什么).没有什么大的区别,除了对说英语的人来说有一定程度的可读性。许多其他语言没有或没有利用现在分词,所以我不确定这是否是一个适合全世界使用的好习惯。@Beetroot Beetroot我同意这是一个英语习惯,只被那些把英语作为自己的[1-n]的人使用+后缀语言。但是,JavaScript的关键字(以及其他保留字)也不适合全球化使用,因为对
else
continue
的抽象理解也不能真正翻译成乌尔都语。我知道你的来历,是的,我很迂腐,但如果我们要废除语言惯例,为什么不回到汇编中的位算术呢“未来”a“延期"所有这些语言都做相似的事情,都是基于英语的范例。@Norguard,的确,jQuery和编程语言一般都与英语密不可分,但是很明显,母语不是英语的程序员倾向于使用母语中的单词/构词来命名变量。与编程语言的本地人,这是我们所有人都可以选择的一个方面。太简洁了——虽然有点接近匈牙利符号()