使用 Q defer 有什么好处?
what is the benefit to use Q defer?
我是 Q.lib 的新手
我们什么时候需要使用Q.defer?
有什么好处?
我们可以 return 承诺 q.defer 吗?
var deferred = Q.defer();
FS.readFile("foo.txt", "utf-8", function (error, text) {
if (error) {
deferred.reject(new Error(error));
} else {
deferred.resolve(text);
}
});
return deferred.promise;
Q 库的主要作者之一曾写道 an article 指出 Q.defer()
不自然且已过时(尽管它仍有一些实际应用)。
更现代的方法(这就是本文的主题)是揭示构造函数模式。这也是 ES6 Promise 标准中的方法(defer
未包含在标准中),因此最好在可用时使用它:
return Q.Promise(function (resolve, reject) {
FS.readFile("foo.txt", "utf-8", function (error, text) {
if (error) {
reject(new Error(error));
} else {
resolve(text);
}
});
});
但是为了(我认为是)你的问题的要点,Q.defer()
和上面的模式在你想从 Async API 创建一个 promise 时很有用不产生承诺。如果您在代码中使用 promises,最好对所有异步代码使用 promises 而不是混合和匹配。 Q.Promise()
构造函数和 Q.defer()
可让您弥补这一差距。
注意:由于您使用的是 Node 风格 API,因此有一种专门为此设计的更简单的技术。您可以使用 Q.nfbind
将节点样式的异步函数转换为 returns 承诺的函数:
var readFile = Q.nfbind(FS.readFile);
readFile("foo.txt", "utf-8").then(function (data) {
console.log("Got the file!");
});
我是 Q.lib 的新手
我们什么时候需要使用Q.defer?
有什么好处?
我们可以 return 承诺 q.defer 吗?
var deferred = Q.defer();
FS.readFile("foo.txt", "utf-8", function (error, text) {
if (error) {
deferred.reject(new Error(error));
} else {
deferred.resolve(text);
}
});
return deferred.promise;
Q 库的主要作者之一曾写道 an article 指出 Q.defer()
不自然且已过时(尽管它仍有一些实际应用)。
更现代的方法(这就是本文的主题)是揭示构造函数模式。这也是 ES6 Promise 标准中的方法(defer
未包含在标准中),因此最好在可用时使用它:
return Q.Promise(function (resolve, reject) {
FS.readFile("foo.txt", "utf-8", function (error, text) {
if (error) {
reject(new Error(error));
} else {
resolve(text);
}
});
});
但是为了(我认为是)你的问题的要点,Q.defer()
和上面的模式在你想从 Async API 创建一个 promise 时很有用不产生承诺。如果您在代码中使用 promises,最好对所有异步代码使用 promises 而不是混合和匹配。 Q.Promise()
构造函数和 Q.defer()
可让您弥补这一差距。
注意:由于您使用的是 Node 风格 API,因此有一种专门为此设计的更简单的技术。您可以使用 Q.nfbind
将节点样式的异步函数转换为 returns 承诺的函数:
var readFile = Q.nfbind(FS.readFile);
readFile("foo.txt", "utf-8").then(function (data) {
console.log("Got the file!");
});