请问 javascript promise 的异步方法,到底怎么同步执行?

2016-11-14 22:45:59 +08:00
 maomaomao001
console.log('开始');


var zz =  sequelize.query("show tables",{ type: sequelize.QueryTypes.SHOWTABLES}).then((results)=>{
    results.forEach((item)=>{
        var bb =sequelize;

        console.log(item);
    });
});
console.log('1111');

现在的结果是
开始
111
然后再是表格信息

11874 次点击
所在节点    问与答
28 条回复
des
2016-11-15 09:07:27 +08:00
@maomaomao001 你可以把 promise 想象成回调的统一封装,这样就比较容易理解
逻辑上就是你必须把返回用户的逻辑写在回调里面,或者用 promise
des
2016-11-15 09:12:48 +08:00
@maomaomao001 看来你还是没明白异步的意义
异步就是为了完全的利用 CPU
你这样空循环到了同步上面照样把 CPU 吃的死死的,就算你能同时处理 3 个用户,那么好, 9 个用户呢?

另外 nodejs 确实不适合用于消耗 CPU 的地方
Herobs
2016-11-15 09:16:40 +08:00
@des 现实是程序很多时候都在 IO , CPU 消耗很大的程序用什么模型都一样。参见 nginx 吊打 apache 。
maomaomao001
2016-11-15 09:23:35 +08:00
@des 可是我以为每个请求它都是单独处理,不互相印象呢。。。
xjp
2016-11-15 10:01:44 +08:00
promise 里 then 中的函数要等到当前所有的执行队列执行完成之后才会执行 你可以理解为给这个函数是在 setTimeout(...,0)里面执行的 是异步的 这个是 promiseA/A+规范中定义的
bdbai
2016-11-15 19:08:32 +08:00
@maomaomao001 Nodejs 是单线程异步模型, CPU 阻塞当然得等。再说别的也这样,这锅 node 不背。
peneazy
2016-11-26 23:45:46 +08:00
js 是单线程的,代码的执行都是以队列的形式。 then 方法里的代码也是要进队列里排队的,而不是只要 resolve 了就能立马执行。
maomaomao001
2016-11-26 23:59:34 +08:00
嗯,解决了~~~以异步方法放进 async 函数里~~用的时候用 await

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/320516

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX