提问人:Julian Wise 提问时间:1/2/2018 最后编辑:KARTHIKEYAN.AJulian Wise 更新时间:1/2/2018 访问量:531
从没有未定义引用 NodeJS 的类函数返回变量
Return a Variable from a class function without Undefinided Reference NodeJS
问:
每次我尝试从类中分配变量时,我都无法使用它。
然后,当我制作一个小示例代码以放到网上时,这些函数在小示例中起作用。从类中返回变量后,如何将变量记录到屏幕上?
在小代码示例中,在实际执行操作的较大代码中,我收到一个未定义的引用错误,可能是因为函数需要更长的时间才能运行。
使用像这样的 main.js:
var KeyPair = require('./Keypair');
var Q = require("q");
path_k = __dirname + "/user_p_key_1.txt";
var pair = new KeyPair();
var p = pair.getPublicKey(path_k);
console.log(p + " sig_1"); // error: logs "undefined sig_1" instead of key.
Q.fcall(p = pair.getPublicKey(path_k))
.then(console.log(p + " sig_2")); // error: logs "undefined sig_2" instead of key.
输出为:
undefined sig_1
undefined sig_2
Key fileread successfully
Is it a valid public key?
true
Key:GAVAPNTBWRG337JWZYLR2SBPD5KFA2PPXDMN4HEEBLWSZQIKTPOEFZL6
Key fileread successfully
Is it a valid public key?
true
Key:GAVAPNTBWRG337JWZYLR2SBPD5KFA2PPXDMN4HEEBLWSZQIKTPOEFZL6
Key fileread successfully
Is it a valid public key?
true
Key:GAVAPNTBWRG337JWZYLR2SBPD5KFA2PPXDMN4HEEBLWSZQIKTPOEFZL6
使用密钥对.js类:
var fs = require('fs');
var StellarBase = require('stellar-base');
var StellarSdk = require('stellar-sdk');
// A class for referencing KeyPair methods to read and write from files
var method = KeyPair.prototype;
function KeyPair() {
}
method.getPublicKey = function(path_k) {
// Read PublicKey from filename
fs.open(path_k, 'r', function(err, fd) {
if (err) {
throw 'could not open file: ' + err;
}
// Buffer Array Initialised for the Public Key
// write the contents of the buffer, from position 0 to the end, to the file descriptor returned in opening our file
var arr = [null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null];
var buffer_k = Buffer.from(arr);
fs.read(fd, buffer_k, 0, buffer_k.length, null, function(err) {
if (err) throw 'error reading file: ' + err;
fs.close(fd, function() {
//console.log('Key fileread successfully');
var user_encoded_k = StellarBase.StrKey.encodeEd25519PublicKey(buffer_k);
//console.log('Is it a valid public key?');
//console.log(StellarBase.StrKey.isValidEd25519PublicKey(user_encoded_k));
//console.log('Key:' + user_encoded_k);
return user_encoded_k
});
});
});
};
读取公钥“user_p_key_1.txt”:
*¶a´M½ý6ÎH/TPiï¸ØÞ„
í,Á
݆B
密钥是测试服务器的密钥。
此外,我创建了简化的 Keypair.js,如下所示,以表明我的代码不起作用,并且示例 Keypair.js 的工作方式与上面的 Keypair.js 不同,并分配变量并将其正确记录到屏幕。
简化密钥对 .js
var fs = require('fs');
// A class for referencing KeyPair methods to read and write from files
var method = KeyPair.prototype;
function KeyPair() {
}
method.getPublicKey = function(value) {
return 1
};
module.exports = KeyPair;
我认为这可能与异步解释器在调用变量时未完成函数有关,所以我后来在 promise 中实现了它,令我难以置信的是仍然返回未定义。我们如何从类函数中分配变量并在 Node.JS 中使用它?p
答: 暂无答案
评论
Q
getPublicKey