博大精深的Promise

 

不定期收集一些和Promise相关的代码片段,各种缘由自行体会。

一、

function timeout(ms = 100) {


    /*1. 为何这种写法,立即返回数据而不是等到过了 ms 后才返回*/
     return new Promise((resolve, reject) => {
       setTimeout(resolve('World'), ms);
     });


    /*2. 为何这种写法,等到过了 ms 后才返回*/
    //return new Promise((resolve, reject) => {
    //    setTimeout(resolve, ms, 'World');
    //});
}


timeout(1000)
    .then(value => {
        console.log(`Hello, ${value}`);
    })
    .catch(err => {
        console.error(err);
    });


二、


setTimeout(function () {
    console.log(1)
}, 0);
new Promise(function executor(resolve) {
    console.log(2);
    for (var i = 0; i < 10000; i++) {
        i == 9999 && resolve();
    }
    console.log(3);
}).then(function () {
    console.log(4);
});
console.log(5);

三、这个是对<不确定函数数目使用nodeJS的async.parallel方法> 的补充,这种方案也可以实现目的

console.log('line 1')
const wait = function (time) {
    // 定义一个 promise 对象
    const promise = new Promise((resolve, reject) => {
        // 将之前的异步操作,包括到这个 new Promise 函数之内
        const task = function () {
            console.log('执行完成')
            resolve()  // callback 中去执行 resolve 或者 reject
        }
        setTimeout(task, time)
    })
    // 返回 promise 对象
    return promise
}
const w = wait
const readFileAsync = async function () {
    console.log('1')
    const f1 = await w(1000)
    console.log('2')
    const f2 = await w(100)
    console.log('3')
    const f3 = await w(10)
    console.log('4')
    const f4 = await w(1)
    console.log('5')
}
readFileAsync();

console.log('line 3')

四,

var myTimeout = function (time) {
    return new Promise(function(yes,no){
        setTimeout(() => {
            console.log('定时器到了:'+time);
            yes(time+1);
        }, time)
    });
}

myTimeout(1000)
.then(myTimeout)
.then(myTimeout)
.then(myTimeout)
.catch(function (error) {
    //用catch捕捉前面的错误
    console.log('sorry, 请求失败了, 这是失败信息:', error);
});

猜你喜欢

转载自blog.csdn.net/ch_majia/article/details/81001256