不定期收集一些和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);
});