标题中的问题非常简单......我不知道发生了什么。 我有一个promise,然后是一个async / await函数来回调promise中的值,但是没有得到正确的值,promise中生成的Array变成了普通的'1'。
这是我的代码:
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()
我试图避免对请求进行操作的所有函数并简单地解决(tickerArr = [1,2,3,4,5,6]并且它显示正确所以我猜它是_.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);
}
知道这里发生了什么吗?最后,我将把这个承诺导出到一个主要版本,它仍将作为一个模块......
提前致谢!
答案 0 :(得分:2)
Array#push()
在追加函数调用参数中提供的值后返回数组的length
, not 返回修改后的数组。您的第一个resolve()
是获得await
'的唯一length
,并且由于在推送第一个元素后1
将为Car::update(['created_by' => 10, 'updated_by' => 15]);
,因此该值将被解析。< / p>