我正在尝试将 promise 与 nodejs 一起使用(我正在尝试使用 node-promise 包);但是,没有任何成功。请看下面的代码:
var express = require('express'),
request = require('request'),
promise = require('node-promise');
app.get('/promise', function(req, res) {
var length = -1;
new promise.Promise(request(
{uri: "http://www.bing.com"},
function (error, response, body) {
if (error && response.statusCode !== 200) {
console.log("An error occurred when connected to the web site");
return;
}
console.log("I'll return: " + body.length);
length = body.length;
}
)).then(function(result) {
console.log("This is what I got: " + length);
console.log("Done!");
});
res.end();
});
上述代码的输出I'll return: 35857
只是,它不去该then
部分。
我将代码更改为:
app.get('/promise', function(req, res) {
var length = -1;
promise.when(
request(
{uri: "http://www.bing.com"},
function (error, response, body) {
if (error && response.statusCode !== 200) {
console.log("An error occurred when connected to the web site");
return;
}
console.log("I'll return: " + body.length);
length = body.length;
}
),
function(result) {
console.log("This is what I got: " + length);
console.log("Done!");
},
function(error) {
console.log(error);
}
);
res.end();
});
这次的输出是This is what I got: -1
……Done!
看起来这次没有调用“承诺”。
所以:
- 需要做什么来修复上面的代码?显然我做得不对:)
- 当我做承诺时,节点承诺是“要走的路”,还是有更好的方法/包?即更简单,更适合生产。
谢谢。