Javascript Promise和Async代码

时间:2017-02-14 19:24:46

标签: javascript asynchronous promise

我正在努力围绕js中的异步和承诺的概念。我无法弄清楚为什么下面的代码不会在我的控制台上打印任何内容。

我假设它是因为我的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));

2 个答案:

答案 0 :(得分:2)

它缺少),现在可以在添加括号后运行。运行代码片段以检查

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!"));
        }
    }) // <---⚠️ I mean this parenthesis
};
count = countdown(5).then(() => console.log('Completed'), (err) => console.log(err.message));

答案 1 :(得分:2)

  

如何在不使用任何内置js函数(setTimeOut等)的情况下将同步代码真正“转换”为异步?

就其本质而言,javascript代码是同步的 (等待抗议的嚎叫减弱) ......

异步的每个(非本机)函数都是由该函数引起的,

  1. 直接调用其中一个本机异步函数,或
  2. 调用其他函数调用函数等,最终直接调用其中一个异步函数
  3. 将某些代码从同步转换为异步的唯一方法是使用本质上异步的许多“本机”函数之一(同样,直接或间接通过最终必须调用其中一个的其他函数)异步函数直接)