为什么'好'和'错误被调用'在下面的例子中编写控制台?
我的理解是你给那些()成功运行的东西和失败的东西?
var deferred = Q.defer();
function two() {
deferred.resolve();
return deferred.promise;
}
two().then(console.log('good'),console.log('Error is called'));
答案 0 :(得分:3)
您必须将函数传递给.then
。你做了什么,你打电话给console.log('good')
并传递了调用它的结果(undefined)
到.then
。使用它:
two().then(
function() { console.log('good'); },
function() { console.log('Error is called'); }
);
答案 1 :(得分:2)
Q.then
function can actually accept three parameters和所有这些都应该是函数。
成功处理程序
失败处理程序
进度处理程序
当你这样做时,
two().then(console.log('good'), console.log('Error is called'));
您实际上是将console.log
s的执行结果传递给then
函数。 console.log
函数返回undefined
。所以,实际上,你正在这样做
var first = console.log('good'); // good
var second = console.log('Error is called'); // Error is called
console.log(first, second); // undefined, undefined
two().then(first, second); // Passing undefineds
因此,您必须将两个函数传递给then
函数。喜欢这个
two().then(function() {
// Success handler
console.log('good');
}, function() {
// Failure handler
console.log('Error is called')
});
但是,Q
实际上提供了一种方便的方法来处理单点承诺中发生的所有错误。这使开发人员不必担心业务逻辑部分中的错误处理。这可以通过Q.fail
函数来完成,就像这样
two()
.then(function() {
// Success handler
console.log('good');
})
.fail(function() {
// Failure handler
console.log('Error is called')
});