我有一个内部维护的 npm 包myNpmPackage
,它导出一个函数(例如fnTestMicroSerConn
),如下所示:
const rp = require('request-promise-native')
exports.fnTestMicroSerConn = function () {
return new Promise(function(resolve, reject) {
var options = {
method: 'GET',
uri : "http://example.net",
resolveWithFullResponse: true,
}
rp(options)
.then(function (response) {
if (response.statusCode !== 200){
console.error("http not 200 but : ",response.statusCode)
resolve(false)
} else {
console.info("connected successfully : "+response.body)
resolve(response)
}
})
.catch(function (err) {
console.error("Error in establishing connectivity : ",err)
resolve(false)
})
})
}
然后我需要从 Meteor 方法调用上述导出函数,如下所示:
import { Meteor } from 'meteor/meteor';
import myNpmPackage from 'myNpmPackage';
Meteor.methods({
foo: function () {
myNpmPackage.fnTestMicroSerConn().then(function (response){
console.log(" My response: ",response.body);
return(response.body)
})
}
});
console.log(" My response: ",response.body);
成功执行,我可以在服务器控制台日志中看到预期值。所以到这里为止都很好。
但是,现在我想将 的值传递response.body
给客户端。简而言之,当我在客户端执行以下操作时:
Meteor.call("foo", function (err, response) {
console.log("calling foo");
if(!err){
console.log("response : ",response);
} else {
console.log("err : ",err);
}
})
不幸的是,目前我正在undefined
访问客户端console.log("response : ",response);
让我知道是否需要更多细节或有任何不清楚的地方。我对Promise编码风格非常陌生,因此,这听起来像是一个菜鸟问题。