📌  相关文章
📜  为什么我们在 JavaScript 中使用 then() 方法?(1)

📅  最后修改于: 2023-12-03 15:21:37.053000             🧑  作者: Mango

为什么我们在 JavaScript 中使用 then() 方法?

在 JavaScript 中,Promise 是用于异步编程的一种机制。它是一种包装异步操作的对象。

当一个 Promise 对象被创建时,它的状态会被设置为“pending”。当 Promise 执行成功时,状态会更改为“fulfilled”,并将结果传递给 then() 方法。当 Promise 执行失败时,状态会更改为“rejected”,并将错误传递给 catch() 方法。

为了获取 Promise 执行结果,我们使用 then() 方法。当 Promise 状态更改为“fulfilled”时,then() 方法会触发它所关联的回调函数。这个回调函数会获取 Promise 返回的结果作为参数。

以下是一个使用 then() 方法的例子:

//创建一个 Promise 对象
var promise = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve("成功执行");
  }, 2000);
});

//使用 then() 方法获取 Promise 结果
promise.then(function(result) {
  console.log(result);
});

在这个例子中,我们创建了一个 Promise 对象,并将其状态设置为“pending”。使用 setTimeout 模拟异步操作,并将 Promise 状态更改为“fulfilled”,并将字符串“成功执行”作为结果传递给 then() 方法关联的回调函数。

在 then() 方法中,我们可以处理 Promise 的返回值,例如打印它。

推荐使用的写法

为了避免回调地狱,在实际开发中,推荐使用 Promise 的链式写法。在这种写法中,我们可以通过 then() 方法将多个 Promise 对象串接起来,以便依次执行它们。

以下是一个使用链式写法的例子:

//创建 Promise 对象1,模拟异步操作1
var promise1 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve(1);
  }, 2000);
});

//创建 Promise 对象2,模拟异步操作2
var promise2 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve(2);
  }, 2000);
});

//链式执行 Promise 对象1和2
promise1.then(function(result1) {
  console.log(result1);
  return promise2;
}).then(function(result2) {
  console.log(result2);
});

在这个例子中,我们创建了两个 Promise 对象,并使用 then() 方法将它们串接起来。第一个 then() 方法会获取第一个 Promise 的结果,并将第二个 Promise 传递给下一个 then() 方法。第二个 then() 方法会获取第二个 Promise 的结果。

这个链条可以根据实际需要任意拓展,以达到更复杂的异步操作处理。

结论

Promise 机制是一种优雅的异步编程方式,能够有效避免回调地狱,提高代码可读性和可维护性。为了获取 Promise 的返回值,我们使用 then() 方法,以避免回调函数的复杂嵌套。而链式写法则可以进一步提高代码可读性。