Promises 的不同函数调用类型
Different function call types with Promises
它们在
方面有何不同
- 执行顺序
- 异常处理
- return 值
等等
getFromURL().then(function () {
return callbackFunc();
});
getFromURL().then(function () {
callbackFunc();
});
getFromURL().then(callbackFunc());
getFromURL().then(callbackFunc);
getFromURL().then(function () {
return callbackFunc();
});
此语句 returns 一个 Promise,它将使用 callbackFunc()
返回的值解析(如果 callbackFunc
returns 一个 Promise,则跟随任何 Promise 链)。这是一个常见的模式。
getFromURL().then(function () {
callbackFunc();
});
此语句 returns 一个解析为未定义的 Promise。如果 callbackFunc()
是异步的,则外部 Promise 在 callbackFunc()
完成之前解析。通常这可能是不可取的。
getFromURL().then(callbackFunc());
此语句立即调用 callbackFunc()
,然后将其 returns 传递给 .then()
。结果未定义。没有看到 callbackFunc
就不知道它做了什么。可能会导致错误。
getFromURL().then(callbackFunc);
此语句 returns 一个将使用 callbackFunc()
返回的值解析的 Promise。它与第一个基本相同,完全可以接受。
一般来说,#1 和#4 是您想要使用的。 #2 和#3 不是马虎就是错误。
They are returning same results
这是不正确的。他们并不是都在做同样的事情。
您的选项#1 和#4 是合理的做事方式。您的选项 #2 可能是错误的,特别是如果 callbackFunc()
是异步的。你的选项 #3 总是错误的,除非 callbackFunc()
return 是一个你想在承诺链中调用的函数,并且你希望它在 getFromURL()
解析之前被调用(这两种情况都很罕见情况)。
要查看所有这些之间的区别,您需要 callbackFunc()
中的 return 值,并且需要第二个 .then()
以便您可以看到 return 值.
那么,假设 callbackFunc()
return 是“你好”。然后,这就是你得到的。这两个是相同的:
getFromURL().then(function () {
return callbackFunc();
}).then(result => {
console.log(result);
});
getFromURL().then(callbackFunc).then(result => {
console.log(result);
});
这两个都将记录调用 callbackFunc()
的 return 值或由 callbackFunc()
编辑的承诺 return 的解析值(以 [=63= 为准) ]s) 或者如果 callbackFunc()
returns 是一个被拒绝的承诺,那么承诺链将接受那个拒绝。这两种方案是执行承诺链的正常方法,其中 callbackFunc()
在 getFromURL()
解析后被排序到承诺链中。
这个总是记录 undefined
:
getFromURL().then(function () {
callbackFunc();
}).then(result => {
console.log(result);
});
因为第一个 .then()
处理程序没有 return 值。 callbackFunc()
的调用顺序与前两个相同,但由于您没有 returning 它是来自 .then()
处理程序的 return 值,因此它是孤立的并与promise 链和 promise 链有一个 undefined
解析值。
如果 callbackFunc()
是异步的,那么这可能是错误的,因为 callbackFunc()
不是承诺链的一部分并且因为你没有 return 它是来自 .then()
处理程序,无法跟踪其成功或失败。这成为一个“即发即忘”的独立承诺链。如果它拒绝,您将收到一个未捕获拒绝的系统错误。
如果 callbackFunc()
是同步的并且您不关心它的 return 值,那么这只是在 getFromURL()
解析之后对 callbackFunc()
排序,就像前两个选项一样,除了你忽略了 return 值。
这个与其他的最不同:
getFromURL().then(callbackFunc()).then(result => {
console.log(result);
});
它将在 getFromURL()
解析之前调用 callbackFunc()
。它的 return 值将传递给 .then()
。除非那个 return 值是一个函数引用,否则它会被 promise 链完全忽略。
它们在
方面有何不同- 执行顺序
- 异常处理
- return 值
等等
getFromURL().then(function () {
return callbackFunc();
});
getFromURL().then(function () {
callbackFunc();
});
getFromURL().then(callbackFunc());
getFromURL().then(callbackFunc);
getFromURL().then(function () {
return callbackFunc();
});
此语句 returns 一个 Promise,它将使用 callbackFunc()
返回的值解析(如果 callbackFunc
returns 一个 Promise,则跟随任何 Promise 链)。这是一个常见的模式。
getFromURL().then(function () {
callbackFunc();
});
此语句 returns 一个解析为未定义的 Promise。如果 callbackFunc()
是异步的,则外部 Promise 在 callbackFunc()
完成之前解析。通常这可能是不可取的。
getFromURL().then(callbackFunc());
此语句立即调用 callbackFunc()
,然后将其 returns 传递给 .then()
。结果未定义。没有看到 callbackFunc
就不知道它做了什么。可能会导致错误。
getFromURL().then(callbackFunc);
此语句 returns 一个将使用 callbackFunc()
返回的值解析的 Promise。它与第一个基本相同,完全可以接受。
一般来说,#1 和#4 是您想要使用的。 #2 和#3 不是马虎就是错误。
They are returning same results
这是不正确的。他们并不是都在做同样的事情。
您的选项#1 和#4 是合理的做事方式。您的选项 #2 可能是错误的,特别是如果 callbackFunc()
是异步的。你的选项 #3 总是错误的,除非 callbackFunc()
return 是一个你想在承诺链中调用的函数,并且你希望它在 getFromURL()
解析之前被调用(这两种情况都很罕见情况)。
要查看所有这些之间的区别,您需要 callbackFunc()
中的 return 值,并且需要第二个 .then()
以便您可以看到 return 值.
那么,假设 callbackFunc()
return 是“你好”。然后,这就是你得到的。这两个是相同的:
getFromURL().then(function () {
return callbackFunc();
}).then(result => {
console.log(result);
});
getFromURL().then(callbackFunc).then(result => {
console.log(result);
});
这两个都将记录调用 callbackFunc()
的 return 值或由 callbackFunc()
编辑的承诺 return 的解析值(以 [=63= 为准) ]s) 或者如果 callbackFunc()
returns 是一个被拒绝的承诺,那么承诺链将接受那个拒绝。这两种方案是执行承诺链的正常方法,其中 callbackFunc()
在 getFromURL()
解析后被排序到承诺链中。
这个总是记录 undefined
:
getFromURL().then(function () {
callbackFunc();
}).then(result => {
console.log(result);
});
因为第一个 .then()
处理程序没有 return 值。 callbackFunc()
的调用顺序与前两个相同,但由于您没有 returning 它是来自 .then()
处理程序的 return 值,因此它是孤立的并与promise 链和 promise 链有一个 undefined
解析值。
如果 callbackFunc()
是异步的,那么这可能是错误的,因为 callbackFunc()
不是承诺链的一部分并且因为你没有 return 它是来自 .then()
处理程序,无法跟踪其成功或失败。这成为一个“即发即忘”的独立承诺链。如果它拒绝,您将收到一个未捕获拒绝的系统错误。
如果 callbackFunc()
是同步的并且您不关心它的 return 值,那么这只是在 getFromURL()
解析之后对 callbackFunc()
排序,就像前两个选项一样,除了你忽略了 return 值。
这个与其他的最不同:
getFromURL().then(callbackFunc()).then(result => {
console.log(result);
});
它将在 getFromURL()
解析之前调用 callbackFunc()
。它的 return 值将传递给 .then()
。除非那个 return 值是一个函数引用,否则它会被 promise 链完全忽略。