node.js - Nodejs 不识别异步函数和引用
问题描述
当我像这个节点 index.js 在终端中运行我的项目时
我收到一个参考错误:未定义配置
/home/ether/Documents/nodesendeth/index.js:6 const {asset, base, spread, allocation} = config; ^
ReferenceError: config is not defined
at tick (/home/ether/Documents/nodesendeth/index.js:6:47)
at run (/home/ether/Documents/nodesendeth/index.js:49:3)
at Object.<anonymous> (/home/ether/Documents/nodesendeth/index.js:52:1)
at Module._compile (internal/modules/cjs/loader.js:1151:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1171:10)
at Module.load (internal/modules/cjs/loader.js:1000:32)
at Function.Module._load (internal/modules/cjs/loader.js:899:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47
在我的代码中,我分配了这样的配置常量:
require('dotenv').config;
const ccxt = require('ccxt');
const axios = require('axios');
const tick = async => {
const {asset, base, spread, allocation} = config;
const market = `${asset}/${base}`;
const orders = binanceClient.fetchOpenOrders(market);
orders.forEach(async order => {
await binanceClient.cancelOrder(order.id);
});
const results = Promise.all([
axios.get('https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd'),
axios.get('https://api.coingecko.com/api/v3/simple/price?ids=tether&vs_currencies=usd')
]);
const marketPrice = results[0].data.bitcoin.usd / results[1].data.tether.usd;
const sellPrice = marketPrice * (1 + spread);
const buyPrice = marketPrice * (1 - spread);
const balances = binanceClient.fetchBalance();
const assetBalance = balances.free[asset];
const baseBalance = balances.free[base];
const sellVolume = assetBalance * allocation;
const buyVolume = (baseBalance * allocation) / marketPrice;
binanceClient.createLimitSellOrder(market, sellVolume, sellPrice);
binanceClient.createLimitBuyOrder(market, sellVolume, buyPrice);
console.log(`
New tick for ${market}...
Created limit sell order for ${sellVolume}@${sellPrice}
Create limit buy order for ${buyVolume}@${buyPrice}`)
}
const run = () => {
const config = {
asset: 'BTC',
base: 'USDT',
allocation: 0.1,
spread: 0.2,
tickInterval: 2000
};
const binanceClient = new ccxt.binance({
apiKey: process.env.API_ENV,
secret: process.env.API_SECRET,
});
tick(config, binanceClient);
setInterval(tick, config.tickInterval, config, binanceClient);
}
run()
我也收到等待错误,说我需要在我所做的同步功能中运行它们。我现在删除了 await 关键字,但应用程序应该使用 await 关键字运行,因为这些函数是异步的。
当我有一个配置变量和一个异步函数时,为什么会出现这些错误?
我假设我的 async 函数不起作用,因为它既不识别配置常量也不识别 async/await 调用
解决方案
config
在您的代码中未定义。
您可能打算在这一行声明它,如下所示:
const config = require('dotenv').config();
...但这只是您问题的一半,因为此外,返回的对象.config()
将所有变量放在一个parsed
属性中。
例如,如果您的 .env 看起来像这样:
apple=red
ball=blue
...而您刚刚登录config
,您会看到:
{解析:{苹果:'红色',球:'蓝色'}}
然后你可以写:
const {apple, ball} = require('dotenv').config().parsed;
console.log(apple, ball);
这会写:
红蓝
在您的特定情况下,如果您希望asset
, base
, spread
, 和allocation
成为 .env 文件中的环境变量,那么您可能会将该行更改为:
const {asset, base, spread, allocation} = config.parsed;
推荐阅读
- c++ - 未定义的符号 str::string 和字符串文字
- javascript - GEOJSON 为什么给出 3 个坐标系,谁能更简单地解释一下它的属性
- python - 导入 keras 和 tensorflow 时出错
- python - PyQT5 QSound 声音之间的延迟
- r - 加入列表列表中的数据
- xamarin - 在 C# 而不是 XAML 中创建框架时,如何在构造函数中分配动态资源?
- python - 将预训练模型更改为在 TensorFlow 中首先期望通道
- next.js - 我可以在 AWS lambda edge 上托管我的 next.js 并拥有单独的 API 服务器吗?
- python - 为什么我的 Python 蛮力哈希破解器现在可以工作了?
- java - 在 MainActivity.java 使用 Android Web 查看应用程序错误上传文件