在已经完成的javascript函数中间,您想要调用一个新的异步函数。因此,您需要将“代码的其余部分”作为回调函数作为参数传递给这个新函数。
function sample() {
alert("a bunch of codes");
alert("another a bunch of codes");
}
我必须更改函数,如下所示。
function sample() {
alert("a bunch of codes");
var cb = function () {
alert("another a bunch of codes");
};
newFunction(cb);
}
如果我想添加另一个必须等待第一个函数的函数,该怎么办?然后我得到了许多多级回调函数来等待另一个..
那么ES5的最佳实践是什么呢?
发布于 2017-10-10 07:29:17
在ES5中,就像你说的,你必须将多个回调函数嵌套在一起。
示例:
function myFunction2(){
console.log(2);
let myFunction = () => {
console.log(1);
}
myFunction();
}
myFunction2();
// OUTPUT
// 2
// 1
ES6还提供了一种新的替代方案promises。
示例:
let myPromise = new Promise((resolve, reject) => {
setTimeout(function(){
resolve(1);
}, 250);
});
console.log(2);
myPromise.then((successMessage) => {
console.log(successMessage);
});
// OUTPUT
// 2
// 1
ES8提供了一个更好的替代方案(尽管它只是基于promises的语法糖),但是您可以将async函数与await一起使用。
示例:
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function add1(x) {
const a = await resolveAfter2Seconds(20);
const b = await resolveAfter2Seconds(30);
return x + a + b;
}
add1(10).then(v => {
console.log(v); // prints 60 after 4 seconds.
});
但请记住,您可能需要使用Babel来转换您的js,以便与所有浏览器兼容。
https://stackoverflow.com/questions/46659839
复制