Arrays NodeJS async/await:为什么我的数组在async/await回调中变为1?
标题中的问题很简单。。。我不知道发生了什么事。 我有一个promise,然后是一个async/await函数从promise回调值,但是promise中生成的数组不是正确的值,而是一个普通的“1” 这是我的密码:Arrays NodeJS async/await:为什么我的数组在async/await回调中变为1?,arrays,node.js,callback,async-await,Arrays,Node.js,Callback,Async Await,标题中的问题很简单。。。我不知道发生了什么事。 我有一个promise,然后是一个async/await函数从promise回调值,但是promise中生成的数组不是正确的值,而是一个普通的“1” 这是我的密码: var async = require('async'); var request = require('request'); var _ = require('underscore'); var getTickerList = new Promise
var async = require('async');
var request = require('request');
var _ = require('underscore');
var getTickerList = new Promise((resolve, reject) => {
var tickerArr = [];
request({
url: 'https://api.kraken.com/0/public/AssetPairs',
json: true
}, (error, response, body) => {
var jsonObject = body;
_.map(jsonObject, function(content) {
_.map(content, function(data) {
if (data.altname.indexOf('EUR') !== -1 || data.altname.indexOf('USD') !== -1)
resolve(tickerArr.push(data.altname));
// resolve(tickerArr = [1, 2, 3, 4, 5, 6]);
});
});
console.log(tickerArr);
})
});
async function exec() {
var tickerList = await getTickerList;
debugger;
console.log(tickerList);
}
exec()
我试图避免所有对请求进行操作的函数,只是简单地给出了一个解析(tickerar=[1,2,3,4,5,6],它正确地显示了,所以我猜是uu.map操作的某个部分干扰了流程,但是如何?在哪里
var async = require('async');
var request = require('request');
var _ = require('underscore');
var getTickerList = new Promise((resolve, reject) => {
var tickerArr = [];
request({
url: 'https://api.kraken.com/0/public/AssetPairs',
json: true
}, (error, response, body) => {
// var jsonObject = body;
// _.map(jsonObject, function(content) {
// _.map(content, function(data) {
// if (data.altname.indexOf('EUR') !== -1 || data.altname.indexOf('USD') !== -1)
// resolve(tickerArr.push(data.altname));
resolve(tickerArr = [1, 2, 3, 4, 5, 6]);
// });
// });
console.log(tickerArr);
})
});
async function exec() {
var tickerList = await getTickerList;
debugger;
console.log(tickerList);
}
知道这里发生了什么吗?最后,我将把promise导出到一个main,它将保持为一个模块
提前感谢!
数组#push()
返回数组的长度
在附加函数调用参数中提供的值后,它不会返回修改后的数组。您的第一个解析()
是唯一一个得到wait
'ed的元素,由于推送第一个元素后长度将是1
,这就是得到解析的值。如果您的节点版本支持async
,则无需导入任何内容,async
是语言的一部分,如如果未删除函数中的async
部分,则删除var async=require('async')
part.Done!再次感谢,它看起来确实更好了。不过问题仍然存在……好吧,所以基本上我需要在阵列完全构建后调用resolve:而不是控制台日志,我可以控制它谢谢Patrick!它工作得很好:resolve(tickerar);
正确,而不是控制台日志!