我需要你的幫助,因爲我得到的問題中提到的typeError,我不知道爲什麼。 我有一個對象(即從請求,承諾回來)看起來像這樣:NodeJS:TypeError:undefined不是函數 - Promise.all - Object.keys
{
"statusCode": 200,
"body": {
"BTC_USD": {
"buy_price": "4258",
"sell_price": "4265",
"last_trade": "4265",
"high": "4360",
"low": "4200",
"avg": "4260.2077946",
"vol": "219.32404491",
"vol_curr": "933982.49730504",
"updated": 1503767188
},
"BTC_EUR": {
"buy_price": "3640.1001",
"sell_price": "3650",
"last_trade": "3644.8",
"high": "3801.999999",
"low": "3622.000006",
"avg": "3685.0414084",
"vol": "94.48595035",
"vol_curr": "347993.56447153",
"updated": 1503767128
},
"BTC_RUB": {
"buy_price": "243511",
"sell_price": "244340",
"last_trade": "243511.49870226",
"high": "248786.99",
"low": "239630",
"avg": "243430.47675799",
"vol": "140.12303781",
"vol_curr": "34185015.26771479",
"updated": 1503767190
},
"BTC_UAH": {
"buy_price": "107000",
"sell_price": "107790",
"last_trade": "107790",
"high": "109900",
"low": "105354",
"avg": "108167.30195869",
"vol": "34.94251977",
"vol_curr": "3770330.73968614",
"updated": 1503767167
},
"DASH_BTC": {
"buy_price": "0.08528559",
"sell_price": "0.08644069",
"last_trade": "0.086196",
"high": "0.093364",
"low": "0.07043",
"avg": "0.0803689",
"vol": "1595.2753788",
"vol_curr": "123.76291968",
"updated": 1503767189
},
},
"request": {
"uri": {
"protocol": "https:",
"slashes": true,
"auth": null,
"host": "api.exmo.com",
"port": 443,
"hostname": "api.exmo.com",
"hash": null,
"search": null,
"query": null,
"pathname": "/v1/ticker/",
"path": "/v1/ticker/",
"href": "https://api.exmo.com/v1/ticker/"
},
"method": "GET",
"headers": {
"accept": "application/json"
}
}
}
,你可以看到,body
有多個對象,我的目標是重新排列的信息在一個新的佈局每個body.keys
:
Object.keys(res.body).forEach((k) => {
result= {
mk: 'exmo',
name: k,
a: res.body[k].sell_price,
b: res.body[k].buy_price,
c: res.body[k].last_trade,
v: res.body[k].vol,
t: res.body[k].vol_curr,
l: res.body[k].low,
h: res.body[k].high,
sn: res.body[k].updated,
}
});
return result;
但由於某些原因,它不工作......我覺得我不能正常使用Promise.all?
這裏是我的測試完整的代碼(它再現錯誤):提前給您的所有
function exmo() {
Promise.all(
function() {
var result = {};
var res = {
"statusCode": 200,
"body": {
"BTC_USD": {
"buy_price": "4258",
"sell_price": "4265",
"last_trade": "4265",
"high": "4360",
"low": "4200",
"avg": "4260.2077946",
"vol": "219.32404491",
"vol_curr": "933982.49730504",
"updated": 1503767188
},
"BTC_EUR": {
"buy_price": "3640.1001",
"sell_price": "3650",
"last_trade": "3644.8",
"high": "3801.999999",
"low": "3622.000006",
"avg": "3685.0414084",
"vol": "94.48595035",
"vol_curr": "347993.56447153",
"updated": 1503767128
},
"BTC_RUB": {
"buy_price": "243511",
"sell_price": "244340",
"last_trade": "243511.49870226",
"high": "248786.99",
"low": "239630",
"avg": "243430.47675799",
"vol": "140.12303781",
"vol_curr": "34185015.26771479",
"updated": 1503767190
},
"BTC_UAH": {
"buy_price": "107000",
"sell_price": "107790",
"last_trade": "107790",
"high": "109900",
"low": "105354",
"avg": "108167.30195869",
"vol": "34.94251977",
"vol_curr": "3770330.73968614",
"updated": 1503767167
},
"DASH_BTC": {
"buy_price": "0.08528559",
"sell_price": "0.08644069",
"last_trade": "0.086196",
"high": "0.093364",
"low": "0.07043",
"avg": "0.0803689",
"vol": "1595.2753788",
"vol_curr": "123.76291968",
"updated": 1503767189
},
},
"request": {
"uri": {
"protocol": "https:",
"slashes": true,
"auth": null,
"host": "api.exmo.com",
"port": 443,
"hostname": "api.exmo.com",
"hash": null,
"search": null,
"query": null,
"pathname": "/v1/ticker/",
"path": "/v1/ticker/",
"href": "https://api.exmo.com/v1/ticker/"
},
"method": "GET",
"headers": {
"accept": "application/json"
}
}
}
Object.keys(res.body).forEach((k) => {
result= {
mk: 'exmo',
name: k,
a: res.body[k].sell_price,
b: res.body[k].buy_price,
c: res.body[k].last_trade,
v: res.body[k].vol,
t: res.body[k].vol_curr,
l: res.body[k].low,
h: res.body[k].high,
sn: res.body[k].updated,
}
});
return result;
}).then((data) => {
console.log(JSON.stringify(data, null, 3));
})
};
exmo();
感謝您的幫助!
*****編輯*****:[試圖澄清]我的目標是每forEach迭代獲得一個對象。最終,這些對象中的每一個都會進入mongo數據庫。 我使用不正確的Promise.all(因爲它需要一組承諾),但正在尋找類似的解決方案。
請告訴我們您正在嘗試與落得什麼輸出。 – jfriend00
超過「需要重寫」是「只刪除一些代碼行」,https://pastebin.com/raw/znLHzvz7是你想要的嗎? – Federkun
'Promise.all()'應該傳入一個promise數組。你正在傳遞一個永遠不會被調用的函數。對於初學者,完全刪除'Promise.all()'。 – jfriend00