我正在努力围绕js中的异步和承诺概念。我无法弄清楚为什么下面的代码不会在控制台上打印任何东西。Javascript承诺和异步代码
我假设这是因为我的Promise中的代码不是异步的,但不是承诺的要点:使某些同步变为异步?
如果不是这种情况,我怎么能真正“转换”同步代码为异步,而不使用任何内置的js函数(setTimeOut等)?
function countdown(seconds) {
return new Promise(function(resolve, reject) {
for (let i = seconds; i >= 0; i--) {
if (i > 0) console.log(i + '...');
else resolve(console.log("GO!"));
}
}
};
count = countdown(5).then(() => console.log('Completed'), (err) => console.log(err.message));
“*不是承诺的要点:使某个同步变成异步吗?*”不,绝对不是。 [promise of point](http://stackoverflow.com/a/22562045/1048572)是通过将事务视为可返回值来处理已经异步的事情。在你的例子中,你有一个同步循环,在这里没有理由使用承诺。 – Bergi
'我不明白为什么下面的代码不会在我的控制台上打印任何东西 - - 什么?甚至没有关于缺少'''的错误?使用更好的浏览器 –
,因为它的本质,javascript是同步的(等待抗议声音减弱)...任何异步的(非本地)函数都是由于该函数直接引起的,或者间接调用其中一个“本地”函数这是异步的 - 因此,将某些代码从同步转换为异步的唯一方式是使用本质上是异步的许多“本地”函数中的一个(再次,直接或间接地通过其他最终将具有的函数直接调用其中一个异步函数) –