JavaScript 承诺和 Node.js
JavaScript promise and Node.js
我有一个简单的 Node.js 服务器,我在其中尝试使用一个名为 image-similarity 的 Node.js 包,根据它的文档,它是这样使用的:
let imageSimilarity = require ('image-similarity') ;
imageSimilarity('./image/1.jpg', './image/2.jpg').then ( res => {
console.log(res) ; // The similarity is 0.8162515507509954
} ) ;
它像那样工作得很好,但我正在尝试在 HTTP Node.js 服务器中使用它,如下所示:
var http = require('http');
var imageSimilarity = require('image-similarity');
http.createServer(function handler(req, res) {
res.writeHead(200, {'Content-Type' : 'text/plain'});
var result = "";
imageSimilarity('./images/1.png', './images/2.png').then(res => {
result = res;
});
res.end(result);
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
我只需要将结果添加到响应中,但我发现我无法从 then function
内部访问 res
变量,而且我不能简单地将结果分配给变量就像前面的示例一样,因为该块是异步执行的,所以当我尝试在外部使用它时,它只是空的。
您 运行 遇到异步问题,您需要从 then()
中调用 res.end(result)
var http = require('http');
var imageSimilarity = require('image-similarity');
http.createServer(function handler(req, res) {
res.writeHead(200, {'Content-Type' : 'text/plain'});
imageSimilarity('./images/1.png', './images/2.png').then(result => {
res.end(result);
});
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
我还注意到我将 then
的参数重命名为 result
以避免与外部 res
的命名冲突
我有一个简单的 Node.js 服务器,我在其中尝试使用一个名为 image-similarity 的 Node.js 包,根据它的文档,它是这样使用的:
let imageSimilarity = require ('image-similarity') ;
imageSimilarity('./image/1.jpg', './image/2.jpg').then ( res => {
console.log(res) ; // The similarity is 0.8162515507509954
} ) ;
它像那样工作得很好,但我正在尝试在 HTTP Node.js 服务器中使用它,如下所示:
var http = require('http');
var imageSimilarity = require('image-similarity');
http.createServer(function handler(req, res) {
res.writeHead(200, {'Content-Type' : 'text/plain'});
var result = "";
imageSimilarity('./images/1.png', './images/2.png').then(res => {
result = res;
});
res.end(result);
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
我只需要将结果添加到响应中,但我发现我无法从 then function
内部访问 res
变量,而且我不能简单地将结果分配给变量就像前面的示例一样,因为该块是异步执行的,所以当我尝试在外部使用它时,它只是空的。
您 运行 遇到异步问题,您需要从 then()
res.end(result)
var http = require('http');
var imageSimilarity = require('image-similarity');
http.createServer(function handler(req, res) {
res.writeHead(200, {'Content-Type' : 'text/plain'});
imageSimilarity('./images/1.png', './images/2.png').then(result => {
res.end(result);
});
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
我还注意到我将 then
的参数重命名为 result
以避免与外部 res