乐趣区

uniapp-项目记录

await
等候,等待;期待

什么是 async、await
await 用于等待异步完成
通常 async、await 都是跟随 Promise 一起使用的

async 返回的都是一个 Promise 对象同时 async 适用于任何类型的函数上。这样 await 得到的就是一个 Promise 对象

async function testSync() {
    const response = await new Promise(resolve => {setTimeout(() => {resolve("async await test...");
         }, 1000);
    });
    console.log(response);
}
testSync();//async await test...
async function asyncAwaitFn(str) {return await new Promise((resolve, reject) => {setTimeout(() => {resolve(str)
       }, 1000);
   })
}

const serialFn = async () => { // 串行执行

   console.time('serialFn')
   console.log(await asyncAwaitFn('string 1'));
   console.log(await asyncAwaitFn('string 2'));
   console.timeEnd('serialFn')
}

serialFn();
async function asyncAwaitFn(str) {return await new Promise((resolve, reject) => {setTimeout(() => {resolve(str)
       }, 1000);
   })
}
const parallel = async () => { // 并行执行
   console.time('parallel')
   const parallelOne = asyncAwaitFn('string 1');
   const parallelTwo = asyncAwaitFn('string 2')

   // 直接打印
   console.log(await parallelOne)
   console.log(await parallelTwo)

   console.timeEnd('parallel')


}
parallel()

await 操作符用于等待一个 Promise 对象。它只能在异步函数 async function 中使用。
表达式
一个 Promise 对象或者任何要等待的值。
返回值
返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。

await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理(fulfilled),其回调的 resolve 函数参数作为 await 表达式的值,继续执行 async function。

若 Promise 处理异常(rejected),await 表达式会把 Promise 的异常原因抛出。

另外,如果 await 操作符后的表达式的值不是一个 Promise,则返回该值本身。

function resolveAfter2Seconds(x) {
 return new Promise(resolve => {setTimeout(() => {resolve(x);
   }, 2000);
 });
}

async function f1() {var x = await resolveAfter2Seconds(10);
 console.log(x); // 10
}
f1();
async function f2() {
 var y = await 20;
 console.log(y); // 20
}
f2();
async function f3() {
 try {var z = await Promise.reject(30);
 } catch (e) {console.log(e); // 30
 }
}
f3();

setTimeout,Promise,async/await 的区别?


async/await

async/ await 来发送异步请求,从服务端获取数据

async 的用法
它作为一个关键字放到函数前面,用于表示函数是一个异步函数

async function timeout() {return 'hello world';}
async function timeout() {return 'hello world'}
timeout();
console.log('虽然在后面,但是我先执行');

async function timeout() {return 'hello world'}
timeout().then(result => {console.log(result);
})
console.log('虽然在后面,但是我先执行');

控制台中的 Promise 有一个 resolved,这是 async 函数内部的实现原理。

返回一个值
当调用该函数时,内部会调用 Promise.solve() 方法把它转化成一个 promise 对象作为返回

函数内部抛出错误
就会调用 Promise.reject() 返回一个 promise 对象

async function timeout(flag) {if (flag) {return 'hello world'} else {throw 'my god, failure'}
}
console.log(timeout(true))  // 调用 Promise.resolve() 返回 promise 对象。console.log(timeout(false)); // 调用 Promise.reject() 返回 promise 对象。

如果函数内部抛出错误,promise 对象有一个 catch 方法进行捕获。

timeout(false).catch(err => {console.log(err)
})

await 是等待的意思
它后面跟着什么呢?

注意 await 关键字只能放到 async 函数里面

更多的是放一个返回 promise 对象的表达式

// 2s 之后返回双倍的值
function doubleAfter2seconds(num) {return new Promise((resolve, reject) => {setTimeout(() => {resolve(2 * num)
       }, 2000);
   } )
}
async function testResult() {let result = await doubleAfter2seconds(30);
   console.log(result);
}



const express = require('express');
const app = express();// express.static 提供静态文件,就是 html, css, js 文件
app.use(express.static('public'));

app.listen(3000, () => {console.log('server start');
})


若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一时间进行处理。


请点赞!因为你们的赞同 / 鼓励是我写作的最大动力!

欢迎关注达达的简书!

这是一个有质量,有态度的博客

退出移动版