我写了以下代码:
var express = require('express');
var app = express();
var Promise = require('bluebird');
var counter = {};
counter.num = 0;
function incr(counter) {
counter.num = counter.num + 1;
}
app.get('/check', function(req, res) {
Promise.promisify(console.log)(counter.num)
.then(Promise.promisify(incr)(counter.num))
.then(console.log(counter.num));
res.end("OK");
});
app.listen(4000);
我希望以下操作可以同步进行: 1. print counter.num(= 0) 增加counter.num 3.打印新的counter.num(= 1)
这就是我得到的:
0 [功能]
0
为什么没有进行手术2?为什么我在控制台中得到“[功能]”?
答案 0 :(得分:1)
您的情况不适合Promise.promisify()
。
假设您使用的是Bluebird,那么Bluebird' Promise.promisify()
需要以下内容:
(err, data)
调用该回调。err
参数中传递时,data
值必须为false。如果出现错误,err
值必须是真值,然后err
是错误值。您对.promisify()
的使用与这些条件中的任何一个都不匹配。
由于promises的目的是跟踪或协调异步操作,因此您甚至不应该对此特定代码使用promises。因为您的所有counter
操作都是同步的,所以您可以这样做:
app.get('/check', function(req, res) {
console.log(counter.num);
incr(counter);
console.log(counter.num);
res.end("OK");
});
答案 1 :(得分:0)
promisify
用于异步功能。 console.log
是同步功能。 Bluebird期望函数被赋予最后一个参数的回调函数。
在你的质疑情况下,我没有看到你可能想要使用诺言的任何理由。