我的代码:
回调:
const first = () => {
console.log('first');
};
const second = (callback) => {
setTimeout(() => {
console.log('second');
callback();
}, 2000);
};
const third = () => {
console.log('third');
};
first();
second(third); OUTPUT: 'first', 'second', 'third'
承诺:
const first = () => new Promise((resolve, reject) => {
resolve('first');
});
const second = () => new Promise((resolve, reject) => {
setTimeout(() => {
resolve('second');
}, 2000);
});
const third = () => {
console.log('third');
};
first()
.then((firstPromiseValue) => {
console.log(firstPromiseValue);
second()
.then((secondPromiseValue) => {
console.log(secondPromiseValue);
third();
})
}); OUTPUT: 'first', 'second', 'third'
全部兑现:
const first = new Promise((resolve, reject) => {
resolve('first');
});
const second = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('second');
}, 2000);
});
const third = new Promise(function(resolve, reject) {
resolve('third');
});
Promise.all([first, second, third]).then((values) => {
console.log(values);
}); OUTPUT: ['first', 'second', 'third']
异步等待:
如何使用异步等待转换上述代码?
哪个是针对javascript应用程序的良好流程控制?
一些使用async.waterfall等方法的异步库呢?
顺便问一下,我上面的代码可以吗?
答案 0 :(得分:2)
如何使用异步等待转换上述代码?
async/await
不能替代诺言,它可以替代then()
和catch()
。您仍然会使用诺言。因此,您将从“承诺”部分中选取first
,second
和third
定义,然后:
async function firstSecondThird() {
let firstPromiseValue = await first();
console.log(firstPromiseValue);
let secondPromiseValue = await second();
console.log(secondPromiseValue);
third(); // not a promise, no need to await
}
firstSecondThird();
哪个是针对javascript应用程序的良好流程控制?
客观地讲,没有一个是更好的。但是async/await
是最易读的,回调是最明确的(then
代码位于中间)。
一些使用async.waterfall等方法的异步库呢?
Promise通常会执行这些库所做的所有事情,并且也会被选择进行标准化。除非您维护需要它们的旧代码,否则您可能会忘记这些库。
顺便问一下,我上面的代码可以吗?
它似乎或多或少地完成了您想要的操作,而效率或易读性方面没有明显的问题。我会没事的。
答案 1 :(得分:-1)
如何使用异步等待转换上述代码?
使用async/await
是使用Promises的另一种方法。这是最好的视觉效果,因为您不会迷失then/catch
,但可以使用它。这里有两个例子。第一个有然后,第二个没有。
const first = async (value) => {
return new Promise((resolve, reject) => {
resolve('first ');
});
};
const second = async (value) => {
return new Promise((resolve, reject) => {
resolve(value + 'second ');
});
};
const third = async (value) => {
return new Promise((resolve, reject) => {
resolve(value + 'third');
});
};
first('').then(second).then(third).then( value => console.log(value) );
const first = async () => {
return new Promise((resolve, reject) => {
resolve('first ');
});
};
const second = async () => {
return new Promise((resolve, reject) => {
resolve('second ');
});
};
const third = () => {
return 'third';
};
async function main() {
let firstValue = await first();
let secondValue = await second();
let thirdValue = third();
return firstValue + ' ' + secondValue + ' ' + thirdValue;
}
main()
.then(console.log)
.catch(err => { console.log('Error:', err) });
哪个是针对javascript应用程序的良好流程控制?
通常,当您需要在函数中间使用Promise或对函数进行多个异步调用时。
一些使用async.waterfall等方法的异步库呢?
我不知道要使用异步/等待的任何库。抱歉!