【发布时间】:2015-07-09 21:12:46
【问题描述】:
假设我有这个代码
function y(resolve, reject)
{
console.log("Result");
resolve();
}
var promise = new Promise(y);
我想知道的是函数y是否会异步执行。
【问题讨论】:
-
没有。
y()将同步执行。在y()中,对setTimeout()、AJAX 请求或类似的调用将导致resolve()或reject()被异步执行,但在您发布的代码中并非如此。 -
因为 Promise 组合良好,并为该行为提供了统一的抽象。否则你只会得到回调汤。仅仅因为组件的行为很简单并不意味着您不需要该组件。例如,
Array.forEach很可能只是一个标准 for 循环。但是Array.forEach看起来更好,并且允许用户不用担心 for 循环的实现来使用它。 -
Promise 允许你写
Promise(x).then(y).then(z)而不是x(function(){y(function(){z()})})就是这样。它不会改变 javascript 的基本工作方式 -
它只是改变了代码的外观。而已。但请记住,易于推理的代码也更易于调试,因此代码的外观并非不重要
-
当你想组合异步操作时,promise 的好处就很明显了。如果不使用帮助程序库(例如
async),就很难等待一组异步回调。 Promise 还使您能够以几乎与同步代码相同的方式编写异步代码(在 ES6 中使用yield,我们将更接近这一点)。
标签: javascript promise es6-promise