异步转同步的编程范式

改写wx.request的请求

第一点就是引入这个工具函数promisify的时候,因为我们的工具函数本身是用ES Module这种规范编写的,所以在引入的时候如果是用CommonJS模块规范进行动态引入的话,要从default上面做解构赋值,第二点就是给父方法添加async标记,为什么要加这个标记,因为在这个方法内部要使用await关键字,第三点就是在promisify这个工具函数改造wx.request接口并且调用的时候,主体代码的逻辑基本是保持不变的,其实只需要将上下这个代码位置稍微变一下就可以了。

1、什么是析构赋值

析构赋值(destructuring assignment)是一种在编程语言中的语法特性,它允许将一个复杂的数据结构(比如数组或对象)解构成单个变量,或者将单个变量赋值给一个复杂的数据结构。

在 JavaScript 中,析构赋值可以用来从数组或对象中提取值,并将它们赋值给变量。例如:

// 从数组中提取值
const [a, b] = [1, 2];
console.log(a); // 1
console.log(b); // 2
// 从对象中提取值
const { x, y } = { x: 3, y: 4 };
console.log(x); // 3
console.log(y); // 4

此外,析构赋值也支持嵌套解构和默认值:

// 嵌套解构和默认值
const { a, b: { c = 0 } = {} } = { a: 1, b: { d: 2 } };
console.log(a); // 1
console.log(c); // 0
2、什么是async,如何使用

async 是 JavaScript 中的一个关键字,用于定义异步函数。异步函数是一种特殊的函数,可以使用 await 关键字来等待异步操作的结果,而不需要显式地使用回调函数或者 Promise。

异步函数使用 async 关键字来定义,它会返回一个 Promise 对象,Promise 对象的解决值通常是异步操作的结果,或者是由 throw 语句抛出的异常。异步函数的声明方式如下:

async function myAsyncFunction() {
  // 异步操作
  return result;
}

在异步函数中,可以使用 await 关键字来等待异步操作的结果。await 关键字后面跟着一个返回 Promise 对象的表达式,表示异步操作的完成状态。在等待异步操作时,异步函数的执行会被暂停,直到异步操作完成并返回结果。如果异步操作被拒绝,await 表达式会抛出一个异常,可以通过 try/catch 语句来捕获它。

以下是一个使用异步函数和 await 的示例:

function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Data fetched!');
    }, 2000);
  });
}

async function getData() {
  try {
    const result = await fetchData();
    console.log(result); // Data fetched!
  } catch (error) {
    console.log(error);
  }
}

getData();

在上面的示例中,fetchData() 函数返回一个 Promise 对象,模拟了一个异步操作,该操作需要 2 秒钟才能完成。在 getData() 函数中,使用 await 关键字等待 fetchData() 函数的结果,并在控制台中输出。由于 fetchData() 函数返回的是一个解决的 Promise 对象,所以 await 关键字会返回它的解决值。这样,当 getData() 函数被调用时,会在控制台中输出 “Data fetched!”。

3、js单线程的异步执行机制以及异步原理

在 JavaScript 中,异步执行可以通过以下几种机制来实现:

回调函数:可以使用回调函数来实现异步操作。当一个异步操作完成时,会调用一个预先定义的回调函数,并将操作的结果作为参数传递给回调函数。在 Node.js 中,回调函数是广泛使用的异步编程机制。

Promise:Promise 是一种用于处理异步操作的机制。在 Promise 中,异步操作可以通过返回一个 Promise 对象来表示。异步操作的结果可以使用 resolve 函数来解决 Promise 对象,并可以使用 then 方法来注册处理异步操作结果的回调函数。

async/await:async/await 是 ECMAScript 2017 引入的一种异步编程机制。在 async 函数中可以使用 await 关键字来等待一个异步操作完成,并在异步操作完成后继续执行代码。async/await 让异步代码的编写更加简单和直观。

这些机制的实现原理都是通过 JavaScript 引擎在执行异步操作时将其放到一个任务队列中,然后继续执行其他代码。当异步操作完成后,JavaScript 引擎会将其添加到事件循环中,等待 JavaScript 引擎空闲时再次执行异步操作的回调函数。

因此,虽然 JavaScript 是单线程的,但是它可以通过异步执行机制来实现非阻塞的

微信小程序异步同步编程范式

你可能感兴趣的:(微信小程序,javascript,前端,开发语言)