工作生活

回味JS(七)之异步

2019-06-30  本文已影响0人  ArmorVon

为什么JavaScript是单线程模型?

程序里面的任务分为哪两类?

同步任务(synchronous)和异步任务

有哪些方式可以实现异步操作?

setTimeout() 和 setInterval() 的区别?

setTimeout(f, 0) 会立即执行吗?

Promise 实例具有哪三种状态?

Promise的then里面不同回调函数有什么差别?

var f1 = new Promise(function(resolve) {
    console.log('f1');
    resolve();
})
function f2 () {
    console.log('f2');
}

<!--写法一-->
f1.then(function() {
    return f2();
})

<!--写法二-->
f1.then(function() {
    f2();
})

<!--写法三-->
f1.then(f2());

<!--写法四-->
f1.then(f2);

// 输出: 
f1
f2

实验如下:

function f1() {
    return new Promise(function(resolve) {
        resolve('f1的结果');
    })
}
function f2 (param) {
    console.log('param: ', param);
    return 'f2的结果';
}

function f3(res) {
    console.log('res:', res);
}

// 写法一
// f1().then(function() {
//     return f2();
// }).then(f3);

// 写法二
// f1().then(function() {
//     f2();
// }).then(f3);

// 写法三
// f1().then(f2()).then(f3);

// 写法四
f1().then(f2).then(f3);
// 写法一
param:  undefined
res: f2的结果

// 写法二
param:  undefined
res: undefined

// 写法三
param:  undefined
res: f1的结果

// 写法四
param:  f1的结果
res: f2的结果

可以看到,

经过查询MDN发现原因如下:

为什么要用Promise做异步处理?

上一篇下一篇

猜你喜欢

热点阅读