Javascript 对protobufjs loadcall使用承诺和异步
我正试图找出重写以下代码的最佳方法:Javascript 对protobufjs loadcall使用承诺和异步,javascript,protobuf.js,Javascript,Protobuf.js,我正试图找出重写以下代码的最佳方法: var api = function(id, contract) { var callback = function (error, root) { if (error) throw error; var by = Buffer.from(contract,'base64') var es = root.lookupType("Contract") var esMsg = es.decode(by) v
var api = function(id, contract) {
var callback = function (error, root) {
if (error)
throw error;
var by = Buffer.from(contract,'base64')
var es = root.lookupType("Contract")
var esMsg = es.decode(by)
var esBytes = es.encode(esMsg).finish()
signature = id.sign(esBytes).toString('base64')
}
return new Promise((resolve, reject) => {
protobuf.load("contract.proto", callback)
})
}
var signContract = async(privateKey, contract) => {
let signature
var id = await crypto.keys.unmarshalPrivateKey(Buffer.from(privateKey, 'base64'))
result = await api(id,contract,signature)
}
function getSessionSignature (hash, time) {
return config.id + ":" + hash + ":" + time
}
module.exports = configure(({ ky }) => {
return async function * signbatch (input, options) {
var contracts = input.Contracts
for (var i = 0 ; i < contracts.length ; i++) {
contracts[i].contract = await signContract(config.PrivKey, contracts[i].contract)
}
//add signed contracts to the searchParams
searchParams.append("arg", JSON.stringify(contracts))
let res
res = await ky.post('storage/upload/signbatch', {
searchParams
}).json()
yield JSON.stringify({})
} else {
yield JSON.stringify({error:"Private key not found"})
}
}
})
var api=函数(id,合同){
var callback=函数(错误,根){
如果(错误)
投掷误差;
var by=Buffer.from(契约,'base64')
var es=root.lookupType(“合同”)
var esMsg=es.解码(通过)
var esBytes=es.encode(esMsg.finish())
signature=id.sign(esBytes).toString('base64'))
}
返回新承诺((解决、拒绝)=>{
protobuf.load(“contract.proto”,回调)
})
}
var signContract=async(privateKey,contract)=>{
让签名
var id=await crypto.keys.unmarshalPrivateKey(Buffer.from(privateKey,'base64'))
结果=等待api(id、合同、签名)
}
函数getSessionSignature(哈希,时间){
返回config.id+“:”+hash+“:”+time
}
module.exports=配置({ky})=>{
返回异步函数*signbatch(输入,选项){
var合同=输入。合同
对于(var i=0;i
我的问题是如何编写sign异步代码,将privateKey和contract变量传递给api var函数,并将签名返回给要分配给contracts[I]的结果变量。contract?请注意,id.sign(..)函数是回调函数中的Promise。您需要在api函数中解析Promise,文档建议您可以在此处使用单参数变量,例如
var root = await protobuf.load("contract.proto");
... // (The code you currently by have in 'callback'
return signature;
由于生成器是异步的
,yield将发出一个承诺
,您可以(显然)用处理它。然后或等待
var signature=id.sign(escrowBytes)。。。是承诺,那么如何将签名的值返回给signBatch?