将 bluebird promise 添加到 NodeJS 模块,然后未定义函数
Adding bluebird promise to NodeJS module, then function is not defined
我是promise 和bluebird 的新手,在我目前的项目中,我必须处理很多异步API 调用,因此我想使用JS promise 作为我的主要工具。
我导入的模块之一如下所示:
var Promise = require("bluebird");
var watson = Promise.promisifyAll(require('watson-developer-cloud'));
var conversation = watson.init();
exports.enterMessage = function (inputText) {
var result; //want to return
conversation.message({
input: {
"text": inputText
}
}, function(err, response) {
if (err) {
console.log('error:', err);
result = err;
}
else {
result = response.output.text;
}
});
console.log(result); //sync call, result === undefined
return result;
}
我的问题是我应该如何处理这个问题?我了解有关将 promise 与 IO 一起使用的示例,例如 fs。所以我尝试通过做conversation.message(...).then(function(response){result = response.output.text})
来模仿这种方式,但它说 conversation.message(...).then() is not defined.
感谢jfriend00的link,我修正了我的逻辑并使用正确的方式来处理这个异步调用。
固定代码如下:
//app.js
var Promise = require("bluebird");
var conversation = Promise.promisifyAll(require('./watson-conversation'));
conversation.enterMessage(currentInput).then(function(val){
res.send(val)}
).catch(function(err){
console.log(err)
});
});
//watson-conversation.js
var conversation = watson.init();
exports.enterMessage = function (inputText) {
return new Promise(function(resolve, reject){
conversation.message({
input: {
"text": inputText
}
}, function(err, response) {
if (err) {
console.log('error:', err);
reject(err);
}
else {
resolve(response.output.text);
}
});
});
}
我是promise 和bluebird 的新手,在我目前的项目中,我必须处理很多异步API 调用,因此我想使用JS promise 作为我的主要工具。 我导入的模块之一如下所示:
var Promise = require("bluebird");
var watson = Promise.promisifyAll(require('watson-developer-cloud'));
var conversation = watson.init();
exports.enterMessage = function (inputText) {
var result; //want to return
conversation.message({
input: {
"text": inputText
}
}, function(err, response) {
if (err) {
console.log('error:', err);
result = err;
}
else {
result = response.output.text;
}
});
console.log(result); //sync call, result === undefined
return result;
}
我的问题是我应该如何处理这个问题?我了解有关将 promise 与 IO 一起使用的示例,例如 fs。所以我尝试通过做conversation.message(...).then(function(response){result = response.output.text})
来模仿这种方式,但它说 conversation.message(...).then() is not defined.
感谢jfriend00的link,我修正了我的逻辑并使用正确的方式来处理这个异步调用。
固定代码如下:
//app.js
var Promise = require("bluebird");
var conversation = Promise.promisifyAll(require('./watson-conversation'));
conversation.enterMessage(currentInput).then(function(val){
res.send(val)}
).catch(function(err){
console.log(err)
});
});
//watson-conversation.js
var conversation = watson.init();
exports.enterMessage = function (inputText) {
return new Promise(function(resolve, reject){
conversation.message({
input: {
"text": inputText
}
}, function(err, response) {
if (err) {
console.log('error:', err);
reject(err);
}
else {
resolve(response.output.text);
}
});
});
}