Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript q两个函数之间的差值,然后是catch_Javascript_Node.js_Promise_Q - Fatal编程技术网

Javascript q两个函数之间的差值,然后是catch

Javascript q两个函数之间的差值,然后是catch,javascript,node.js,promise,q,Javascript,Node.js,Promise,Q,只是一个简单的澄清问题: 两者之间有什么区别吗 promiseGeneratingFunction.then(successHandler, errorHandler).done(); 及 ? 谢谢 当您只对处理错误感兴趣时,Q承诺提供了失败速记 正如文件所述,这只是一种简写 当您只对处理错误感兴趣时,Q承诺提供了失败速记 正如文档所述,这只是一种简写是的,这两个例子是不同的。 其他答案没有考虑连锁的影响。文件说: A sugar method, equivalent to promise.t

只是一个简单的澄清问题:

两者之间有什么区别吗

promiseGeneratingFunction.then(successHandler, errorHandler).done();

?

谢谢

当您只对处理错误感兴趣时,Q承诺提供了失败速记

正如文件所述,这只是一种简写

当您只对处理错误感兴趣时,Q承诺提供了失败速记

正如文档所述,这只是一种简写

是的,这两个例子是不同的。 其他答案没有考虑连锁的影响。文件说:

A sugar method, equivalent to promise.then(undefined, onRejected).
所以是的,
.catch
相当于
。然后
。但这不是你的例子所显示的

你比较

promiseGeneratingFunction.then(successHandler, errorHandler).done();

// VS

promiseGeneratingFunction.then(successHandler).catch(errorHandler).done();
如果我们使用记录在案的比较来分解第二个示例,它实际上是:

promiseGeneratingFunction.then(successHandler, errorHandler).done();

// VS

promiseGeneratingFunction.then(successHandler).then(undefined, errorHandler).done();
这两个人处理错误的方式不同。如果生成的承诺成功,这两个示例都将调用
successHandler
,如果承诺失败,则调用
errorHandler
,因此它们非常相似。区别在于它们如何处理
successHandler
中的错误

// this is a fulfilled promise since the thrown error was handled
Promise.resolve().then(function(){ throw new Error(); }).catch(function(){});

// this is a rejected promise
Promise.resolve().then(function() { throw new Error() }, function(){});
如果您的
successHandler
函数要抛出一个异常(或返回一个被拒绝的承诺),那么您的第一个示例没有附加错误处理程序(
errorHandler
仅附加到
promiseGeneratingFunction
,因此您的承诺将从
.done()抛出一个未捕获的异常)
。在第二个示例中,从
successHandler
抛出的错误也会被捕获在
errorHandler
中,因为它被绑定在承诺链的更下游

等效的同步代码如下所示:

var error = null;
var result;

try {
    result = func();
} catch (err){
    error = err;
}

if (error){
    errorHandler(error);
} else {
    successHandler(result);
}

// VS

try {
    var result = func();

    successHandler(result);
} catch (err){
    errorHandler(err);
}
是的,这两个例子是不同的。 其他答案没有考虑链接的影响。文件说:

A sugar method, equivalent to promise.then(undefined, onRejected).
是的,
.catch
相当于
。然后
。但这不是您的示例所显示的

你比较

promiseGeneratingFunction.then(successHandler, errorHandler).done();

// VS

promiseGeneratingFunction.then(successHandler).catch(errorHandler).done();
如果我们使用记录在案的比较来分解第二个示例,它实际上是:

promiseGeneratingFunction.then(successHandler, errorHandler).done();

// VS

promiseGeneratingFunction.then(successHandler).then(undefined, errorHandler).done();
这两个示例在处理错误的方式上表现不同。如果生成的承诺成功,这两个示例将调用
successHandler
,如果承诺失败,则调用
errorHandler
,因此它们非常相似。区别在于它们在
successHandler
中处理错误的方式

// this is a fulfilled promise since the thrown error was handled
Promise.resolve().then(function(){ throw new Error(); }).catch(function(){});

// this is a rejected promise
Promise.resolve().then(function() { throw new Error() }, function(){});
如果您的
successHandler
函数要抛出一个异常(或返回一个被拒绝的承诺),那么您的第一个示例没有附加错误处理程序(
errorHandler
仅附加到
promiseGeneratingFunction
,因此您的承诺将从
.done()抛出一个未捕获的异常)
。在第二个示例中,从
successHandler
抛出的错误也会被捕获在
errorHandler
中,因为它被绑定在承诺链的更下游

等效的同步代码如下所示:

var error = null;
var result;

try {
    result = func();
} catch (err){
    error = err;
}

if (error){
    errorHandler(error);
} else {
    successHandler(result);
}

// VS

try {
    var result = func();

    successHandler(result);
} catch (err){
    errorHandler(err);
}

取决于你是什么图书馆using@monkeyinsight为什么结尾处的
.done()
?@jfriend00 done会处理任何未捕获的内容errors@sakekasi有一些promise库允许您省略
。done
,这取决于您是什么库using@monkeyinsight为什么要使用
.done()
最后?@jfriend00 done处理任何未捕获的内容errors@sakekasi有一些promise库允许您省略
.done
,正如您所知。这是正确的答案,我发现另一个答案有两个向上投票的事实非常令人惊讶。+1表示正确性和同步代码类比。这是正确的答案,我发现事实上,另一个答案有两张赞成票,这确实令人惊讶。正确性和同步代码类比为+1。