将此视为面试问题。这些承诺会给写作带来什么特殊的后果?其中一些会做同样的事情,但是我需要注意哪些特殊条件?
如果成功,请执行doSomethingElse();
,因为内部函数是使用currying完成的,因此可以添加特殊的自定义参数。
doSomething().then(function () {
return doSomethingElse(a);
});
如果成功:
doSomething().then(function () {
doSomethingElse(a);
});
doSomethingElse()
是回调函数,与4(???)相同doSomething().then(doSomethingElse());
回调函数
doSomethingElse()
,与3(?)相同doSomething().then(doSomethingElse);
最佳答案
1比2
在情况1中-您可以在promise链的下一个doSomethingElse(a)
中获得then
的结果。
像这样:
doSomething().then(function () {
return doSomethingElse(a);
}).then(function (doSomethingElseWithAResult /* <-- here */) {
// Some code
});
在情况2中-您始终会在诺言链中的下一个
undefined
中得到then
:doSomething().then(function () {
return doSomethingElse(a);
}).then(function (alwaysUndefined /* <-- here */) {
// Some code
});
1比3
您可以这样重写3:
doSomething().then(function (doSomethingResult) {
return doSomethingElse(doSomethingResult);
});
因此3接近1,但是在情况3中,我们没有为
doSomethingElse
提供特殊的自定义参数,而是将doSomething
的结果传递给doSomethingElse
而不是a
。1比4
假设
doSomethingElse
是至少2个参数的咖喱函数,与1 vs 3相同。2比3
记住我们可以这样重写3:
doSomething().then(function (doSomethingResult) {
return doSomethingElse(doSomethingResult);
});
不同之处在于,在第2种情况下,我们没有为
doSomethingElse
提供特殊的自定义参数(请参见1与3),并且没有将doSomethingElse
的结果传递给承诺链中的下一个then
(请参见1与2)。2比4
假设
doSomethingElse
是至少2个参数的咖喱函数,与2 vs 3相同。3比4
假设
doSomethingElse
是至少1个参数的咖喱函数,它们是相同的。如果
doSomethingElse
不是咖喱函数,则它们是不同的。