nodejs async await promise理解

这篇文章是让大家更好理解 nodejs的async 和await 以及promise, 其实await状态虽然是在你需要的步骤里面是同步的,但是整个系统状态是异步的,是异步里面的同步,无需担心系统性能问题。看实例就明白了。

var x = 100;
async function myfunc(param) {
    return new Promise((resolve, reject) => {
        // 模擬
        setTimeout(() => {
            param += 200;
            resolve(param);
        }, 1000);
    })
}
async function myfunc2() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
        resolve('myfunc2');
    }, 1000);
    });
}
async function test() {
    await myfunc2();
    console.log('the one step');
    let result = await myfunc(x);
    console.log(result);// 两秒之后会被打印出来
}
test();

以上输出

$ node testcache.js
the one step
300
看起来是同步的,没问题,那么是否阻塞呢?
加上以下语句

for(var i =0;i<10;i++)
{
    console.log("this is the test number :",i);
}

输出以下

$ node testcache.js
this is the test number : 0
this is the test number : 1
this is the test number : 2
this is the test number : 3
this is the test number : 4
this is the test number : 5
this is the test number : 6
this is the test number : 7
this is the test number : 8
this is the test number : 9
the one step
300

说明整个系统依然处在异步状态,只是你需要的是同步的,每个步骤其实依然是异步的,是事件状态。要理解整个async 和awati 以及promise的状态。

下面模拟三个过程是串行的

//使用 setTimeout 来模拟异步请求
function sleep(second, param) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
           if(1)
            resolve(param);
            else
             reject(0);
        }, second);
    })
}

async function test2() {
    let result1 = await sleep(2000, 'step1');
    let result2 = await sleep(1000, 'step2' + result1);
    let result3 = await sleep(500, 'step3' + result2);
    console.log(result3,result2,result1);
}

test2();

会按照你需要的输出

错误处理方式

async function errorProcess() {
    try {
        let result = await sleep(1000);
        console.log(result);
    } catch (err) {
        console.log(err);
    }
}

reject会捕获到catch里面,自行处理就好

你可能感兴趣的:(nodejs,nodejs,promise)