node.js - 从 Promise 中获取结果 - Nodejs
问题描述
我正在将 nodejs 与这个库 node-jose 一起使用,以允许我获取我的私钥并使用它来签名和/或解密。
所以现在的问题是这样的。我试图在生成结果后从结果中返回签名,但无法这样做。
在A 点,当我执行 console.log 时,我将真正看到我的结果。除此之外,即在B 点,我无法看到我的结果。我得到的只有这个。
2018-10-23T15:04:23.553 signature1: null //Point B
我做事的方式正确吗?
主.js:
let jose = require('node-jose');
function sendRequest(id, keystore, kid1, kid2) {
let result;
...
let baseString1 = generateBaseString(baseUrl1);
let signature1 = null;
jose.JWS.createSign(keystore.get(kid1)).update(baseString1).final().then(function(result) {
signature1 = result;
//Point A
console.log(result);
});
//Point B
console.log("signature1: " + signature1);
...
return result;
}
解决方案
尝试使用异步/等待功能
async function sendRequest(id, keystore, kid1, kid2) {
let result;
...
let baseString1 = generateBaseString(baseUrl1);
let signature1 = await jose.JWS.createSign(keystore.get(kid1)).update(baseString1).final();
//Point B
console.log("signature1: " + signature1);
...
return result;
}
您的 A 点并不意味着它将比您的 B 点先执行.then()
,只有在操作/承诺已经解决时才会执行。
也许这会帮助你理解Promise
https://codeburst.io/javascript-promises-explained-with-simple-real-life-analogies-dd6908092138
推荐阅读
- javascript - 谷歌应用程序脚本 - 一个月后无法隐藏工作表
- c++ - 如何在 gtkmm C++ 中以编程方式注入按钮按下之类的事件?
- python - 关闭每个函数之间的 postgres 连接时出错
- javascript - 如何计算字符串中的元音并返回一个整数(连续元音计数两次!)?
- neo4j - 基于 Neo4j 中节点属性的 Jaccard 相似度创建节点之间的关系?
- ubuntu - 如何在 Ubuntu 中摆脱 jenv?
- plone - 复制后重命名敏捷对象(id)
- linux - OpenCL 设备仅对 root 可见
- aws-amplify - 我可以在 AWS Amplify 的 Velocity 模板中获取用户电子邮件吗?
- python - 如何制作一个 Python 脚本,为您提供模式中字符串的每次迭代