javascript - 在promise中设置一个变量并在函数nodejs之外使用它
问题描述
我有以下代码。我正在尝试在 .then 语句之外使用变量 rsname、rslevel 和 rsexp,但我似乎找不到完成这项工作的方法。(我使用的模块可以在这里找到:https ://pqt.gitbook.io/runescape-api )。
const { hiscores } = require('runescape-api');
var rsn = "le me";
var rsnlookup = hiscores.getPlayer(rsn).then(data => {
var rsname = data.name;
var rslevel = data.skills.dungeoneering.level;
var rsexp = data.skills.dungeoneering.experience;
console.log(rsname);
console.log(rslevel);
console.log(rsexp);
})
rsnlookup.catch((error) => {
console.error("This username doesn\'t exist.");
});
console.log(rsnlookup);
解决方案
你不能,用你目前的设置。这就是它的本意。无论您对这些变量做什么,都不能离开该功能。
您可以使用以下函数将数据传递到其他地方:
const { hiscores } = require('runescape-api');
var rsn = "le me";
function doSomethingWithData(rsname, rslevel, rsexp) {
console.log(rsname, rslevel, rsexp);
}
var rsnlookup = hiscores.getPlayer(rsn).then(data => {
var rsname = data.name;
var rslevel = data.skills.dungeoneering.level;
var rsexp = data.skills.dungeoneering.experience;
doSomethingWithData(rsname, rslevel, rsexp);
})
rsnlookup.catch((error) => {
console.error("This username doesn\'t exist.");
});
这就是 JavaScript 应该如何工作的。每当您调用另一台服务器时,JS 不会停止并等待请求返回。当请求仍在互联网上传输给您时,它实际上会继续执行。这就是为什么你需要提供一个回调函数,让它在完成后返回并执行。
例如,这里有一个更简单的细分:
// The variables must be declared outside the function for them
// to be accessible from outside the function.
let rsname;
let rslevel;
let resexp;
// This call only BEGINS the request. It will not stay and wait for it.
hiscores.getPlayer(rsn).then(data => {
// This code is only executed after the request comes back with the data,
// so the data can only be used from here.
// These variables do not get declared until this time,
// so they won't exist outside this function until the request is done.
// You need to pass them out to wherever they are needed from here,
// or do all your logic with it right here.
rsname = data.name;
rslevel = data.skills.dungeoneering.level;
rsexp = data.skills.dungeoneering.experience;
});
// This is executed the moment the request begins, it does not wait for it to return.
console.log(rsname); // The variables are still undefined here since the request is not back yet here.
本质上,所有“异步”意味着代码将开始执行,并继续向前而不等待它完成。然后当它完成后,它会返回执行某种回调函数。
推荐阅读
- node.js - ionic+firebase+elasticsearch 无法使用 elasticsearch.js 进行身份验证
- javascript - 使用 PHP 调用 API 后如何在 sessionStorage 中存储会话数据?
- reactjs - 使用 Slim 框架从 axios POST 请求中获取正文
- outlook-web-addins - Outlook Web 加载项在 OWA 中有效,但在桌面 Outlook 中的输入字段无效
- indexing - Neo4j 和关系属性的模式索引
- html - 失焦时过渡无法正常工作
- perl - 尝试重新加载 module.pm 中止。编译失败
- python - 如何在 Dojo-heavy web 上单击按钮
- php - 让 Nginx 下载 PHP 文件而不是执行
- c++ - 只需按一次按钮即可通过 USB 发送数据