基本用法
function fetch() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject('请求失败');
}, 1000)
})
}
fetch()
.then(
function (data) {
console.log('请求处理-0');
console.log(data + "-0");
},
function (reason, data) {
console.log('触发异常-2');
console.log(reason + "-2");
}
)
常用写法 resolve()
function cook() {
console.log('开始做饭。');
var p = new Promise((resolve, reject) => {
setTimeout(function () {
console.log('做饭完毕!');
resolve('鸡蛋炒饭');
}, 1000);
});
return p;
}
function eat(data) {
console.log('开始吃饭:' + data);
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('吃饭完毕!');
resolve('一块碗和一双筷子');
}, 2000);
});
return p;
}
function wash(data) {
console.log('开始洗碗:' + data);
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('洗碗完毕!');
resolve('干净的碗筷');
}, 2000);
});
return p;
}
cook()
.then(eat)
.then(wash)
.then(function (data) {
console.log(data);
});
常用写法 reject()
function cook() {
console.log('开始做饭。');
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('做饭失败!');
reject('烧焦的米饭');
}, 1000);
});
return p;
}
function eat(data) {
console.log('开始吃饭:' + data);
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('吃饭完毕!');
resolve('一块碗和一双筷子');
}, 2000);
});
return p;
}
cook()
.then(eat, function (data) {
console.log(data + '没法吃!');
})
catch() 用法
function cook() {
console.log('开始做饭。');
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('做饭失败!');
reject('烧焦的米饭');
}, 1000);
});
return p;
}
function eat(data) {
console.log('开始吃饭:' + data);
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('吃饭完毕!');
resolve('一块碗和一双筷子');
}, 2000);
});
return p;
}
cook()
.then(eat)
.catch(function (data) {
console.log(data + '没法吃!');
});
all() 彼此异步 同时完成才会进行下一步
function cutUp() {
console.log('开始切菜。');
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('切菜完毕!');
resolve('切好的菜');
}, 1000);
});
return p;
}
function boil() {
console.log('开始烧水。');
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('烧水完毕!');
resolve('烧好的水');
}, 1000);
});
return p;
}
Promise
.all([cutUp(), boil()])
.then(function (results) {
console.log("准备工作完毕:");
console.log(results);
});
race() 彼此异步 只要有一个完成 就会进行下一步
function cutUp() {
console.log('开始切菜。');
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('切菜完毕!');
resolve('切好的菜');
}, 1000);
});
return p;
}
function boil() {
console.log('开始烧水。');
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('烧水完毕!');
resolve('烧好的水');
}, 1000);
});
return p;
}
Promise
.race([cutUp(), boil()])
.then(function (results) {
console.log("准备工作完毕:");
console.log(results);
});
racey应用:
function useRace(){
function requestImg() {
var p = new Promise(function (resolve, reject) {
var img = new Image();
img.onload = function () {
resolve(img);
}
img.src = 'xxxxxx';
});
return p;
}
function timeout() {
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
reject('图片请求超时');
}, 5000);
});
return p;
}
Promise
.race([requestImg(), timeout()])
.then(function (results) {
console.log(results);
})
.catch(function (reason) {
console.log(reason);
});
promisify 定义,用于常规函数Promise化
promisify (todofunction) {
return new Promise((resolve, reject) => {
todofunction({
success: function (res) {
resolve(res)
},
fail: function (error) {
reject(`error`)
}
})
})
}
async myaction (data) {
let Res = await promisify(todofunction)
if (Res.message === "SUCCESS") {
} else {
}
}