什么是完全的承诺

iRo*_*tia 6 javascript mongoose node.js

当我偶然发现台词时,我正在查看猫鼬文档

猫鼬查询不是承诺。为了方便起见,它们具有.then()函数用于co和async / await。如果您需要完整的承诺,请使用.exec()函数。

在这个例子中

var query = Band.findOne({name: "Guns N' Roses"});
assert.ok(!(query instanceof Promise));

// A query is not a fully-fledged promise, but it does have a `.then()`.
query.then(function (doc) {
  // use doc
});

// `.exec()` gives you a fully-fledged promise
var promise = query.exec();
assert.ok(promise instanceof Promise);

promise.then(function (doc) {
  // use doc
});
Run Code Online (Sandbox Code Playgroud)

现在,当他们说完全承诺时,我并没有理解他们的意思,就像对我来说.then()应该是升职,然后它还允许异步和等待。

那么有人可以向我解释完全承诺的含义是什么?

参考链接:https : //mongoosejs.com/docs/promises.html#queries-are-not-promises

T.J*_*der 6

这意味着,根据Promises / A +规范的定义,查询返回的值才是ables,而不是实际实例。这意味着它们可能不具有Promise的所有功能(例如和方法)。实际实例将是“完全成熟”的承诺。PromisecatchfinallyPromise

英语术语“ 完全成熟 ”的意思是“完整”或“充分发展”。它来自鸟类学(或至少与鸟类有关的术语):一只成年羽毛的雏鸡(一只幼鸟)是“成熟的”;如果它的所有成年羽毛都完全覆盖了其羽绒大衣,那么它就是成熟的。