我想知道为什么BlueBird希望在承诺的回调中采取行动。像:
var pr = new Promise(function(successCb, errorCb){
// do what you need
successCb();
});
pr.then(function(){
// react to promise resolved
});
我应该有类似的流程:
var pr = new Promise;
// do what you need
pr.resolve();
pr.then(function(){
// react to promise resolved
});
我不明白为什么避免回调的模式要我使用回调。这是出于特定原因需要吗?
答案 0 :(得分:0)
Promise不会避免回调,但(除其他外)会阻止回调地狱,并使错误捕获更容易。
doAsync1(params, function(err, res) {
if (err) {
throw new Error(err);
}
doAsync2(res1, function(err, res2) {
if (err) {
throw new Error(err);
}
doAsync3(res2, function(err) {
if (err) {
throw new Error(err);
}
// then do stuff
}
}
}
......将在宣传的土地上写出来:
doAsync1(params)
.then(function(res1) {
return doAsync2(res1);
})
.then(function(res2) {
return doAsync3(res2);
})
.then(function(res3) {
// Do something
})
.catch(err) {
throw new Error(err);
});
您可以找到more details here
编辑:所以你是对的:在同步代码中,因此没有回调,Promise是无用的。
答案 1 :(得分:0)
回调是由另一个函数调用的任何函数,它将第一个函数作为参数。它在该函数内的某个指定点“被回调”。 当我们谈论javascript时,我们一直在处理回调。
你无法避免回调,它们是节点js库的核心。它们实现了跨应用程序的平衡,无阻塞的控制流,它们是几乎所有promise库的基础。在你的代码中,传递给它的函数只是一个回调函数。
Promise实际上是一种不同的风格,可以实现与回调相同的效果。这里的优点是抽象 使用回调非常愉快。
您可以浏览这些链接并更好地掌握这些概念: