Promise.resolve() 和 Promise.reject() 使用实例详解
在前端开发中,我们经常使用 Promise 进行异步编程,Promise 有两种状态:pending 和 fulfilled。在进行异步操作时,我们需要使用 Promise.resolve() 和 Promise.reject() 来处理异步操作的状态,以便我们可以根据不同的状态来执行不同的操作。
下面是 Promise.resolve() 和 Promise.reject() 的使用实例详解。
Promise.resolve()
当我们需要将一个已有的对象或值转换为一个 Promise 对象时,可以使用 Promise.resolve() 方法。它会返回一个 Promise 对象,并且这个 Promise 对象的状态为 fulfilled。
下面是一个示例代码:
const myPromise = Promise.resolve("Hello, world!"); myPromise.then(value => { console.log(value); // 输出 "Hello, world!" });
在上面的代码中,我们将一个字符串 "Hello, world!" 转换为一个 Promise 对象,并将这个对象保存在变量 myPromise 中。然后,我们在 myPromise 上调用 then() 方法,以便在 Promise 对象的状态变为 fulfilled 时,执行相应的操作,这里我们只是简单地在控制台中打印了这个字符串。
另外,Promise.resolve() 还可以将一个 Promise 对象转换为一个新的 Promise 对象。这个新的 Promise 对象和传入的 Promise 对象具有相同的状态和值。
下面是另一个示例代码:
-- -------------------- ---- ------- ----- --------- - --- ----------------- ------- -- - ------------- -- - --------------- --------- -- ------ --- ----- ------------ - --------------------------- ------------------------ --- ----------- -- -- ---- ----------------------- -- - ------------------- -- -- ------- ------- ---展开代码
在上面的代码中,我们创建了一个 Promise 对象 myPromise,它将在 1 秒钟后状态变为 fulfilled,并返回字符串 "Hello, world!"。接着,我们使用 Promise.resolve() 方法将 myPromise 转换为一个新的 Promise 对象 myNewPromise。我们可以看到,myNewPromise 和 myPromise 具有相同的状态和值。最后,我们在 myNewPromise 上调用 then() 方法,以便在 Promise 对象的状态变为 fulfilled 时,执行相应的操作。
Promise.reject()
当我们需要创建一个 Promise 对象,并将它的状态设置为 rejected 时,可以使用 Promise.reject() 方法。
下面是一个示例代码:
const myPromise = Promise.reject(new Error("Something went wrong!")); myPromise.catch(error => { console.log(error.message); // 输出 "Something went wrong!" });
在上面的代码中,我们使用 Promise.reject() 方法创建了一个 Promise 对象 myPromise,并将它的状态设置为 rejected。我们将一个 Error 对象作为 Promise 的值来拒绝这个 Promise 对象。接着,我们在 myPromise 上调用 catch() 方法,以便在 Promise 对象的状态变为 rejected 时,执行相应的操作,这里我们只是简单地在控制台中打印了这个 Error 对象的 message 属性。
另外,Promise.reject() 方法返回的 Promise 对象和通过 Promise.resolve() 转换来的 Promise 对象一样,都是立即执行的。
下面是一个比较复杂的示例代码:
-- -------------------- ---- ------- ----- --------------- - ------------------------ ----- --------------- - ----------------------------- ----------------------------- ----------------- ------------ -- - ----- ---------- --------- - ------- -- --------- --- ------ -- -------- --- ------------ - ------ ------------------------- -------- - ---- - ------ ------------------ -------------- -------- -- ------------- - -- ------------- -- - --------------------- -- -- --------- ------ -- ------------ -- - --------------------------- -- -- -------- -------- -- ---------- ---展开代码
在上面的代码中,我们首先创建了两个 Promise 对象 usernamePromise 和 passwordPromise,并使用 Promise.resolve() 方法将它们转换为 Promise 对象。然后,我们使用 Promise.all() 方法将这两个 Promise 对象合并成一个新的 Promise 对象。
接着,我们在合并后返回的 Promise 对象上调用 then() 方法,以便在所有的 Promise 对象都变为 fulfilled 时,执行相应的操作。我们将 username 和 password 存储在 values 数组中,并检查是否存在一个叫做 "John" 和 "secret123" 的用户名和密码,如果是,我们使用 Promise.resolve() 方法返回一个已经被 fulfilled 的 Promise 对象,并向控制台输出 "Welcome, John!"。否则,我们使用 Promise.reject() 方法返回一个 rejected 的 Promise 对象,并向控制台输出 "Invalid username or password!"。
最后,我们在返回的 Promise 对象上调用 catch() 方法,以便在任意一个 Promise 对象变为 rejected 时,执行相应的操作。我们只是简单地将 Error 对象的 message 属性输出到控制台。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bf85bd0c976d473a433eb8