我如何通过getPrice然后按顺序获取getMarketCap函数,以便显示搜索到的价格,搜索到marketcap然后搜索完成'?我看过承诺,但我不确定在这种情况下如何使用它们。
const rp = require('request-promise');
var parseBody1;
var price;
var parseBody2;
var marketCapUsd;
function getPrice(website) {
rp(website)
.then(function (body) {
parseBody1 = JSON.parse(body);
price1 = parseBody1[0]['price_usd'];
console.log('price searched');
});
}
function getMarketCap(website) {
rp(website)
.then(function (body) {
parseBody2 = JSON.parse(body);
marketCapUsd = parseBody2[0]['market_cap_usd'];
console.log('marketcap searched');
});
}
$('#search-button').click(function() {
getPrice('https://api.coinmarketcap.com/v1/ticker/ethereum/?convert=usd');
getMarketCap('https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=usd');
console.log('searches complete');
console.log(price, marketCapUsd);
});
答案 0 :(得分:1)
函数getPrice
和getMarketCap
应该返回promises。
由于您已经在使用请求承诺,因此您可以直接返回它,
像
这样的东西function getPrice(website) {
return rp(website)
.then(function (body) {
parseBody1 = JSON.parse(body);
price1 = parseBody1[0]['price_usd'];
console.log('price searched');
});
}
您也是同步调用它们,因此getMarketCap
不会等待getPrice
完成。
为了实现串行流程。您应该仅在getMarketCap
发帖getPrice
时致电{/ 1}}。
像
这样的东西getPrice('https://api.coinmarketcap.com/v1/ticker/ethereum/?convert=usd')
.then(() => {
return getMarketCap('https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=usd');
})
答案 1 :(得分:0)
试试这个
$('#search-button').click(function() {
Promise.all([
rp('https://api.coinmarketcap.com/v1/ticker/ethereum/?convert=usd'),
rp('https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=usd')
]).then((result)=>{
parseBody1 = result[0];
parseBody2 = result[1];
price1 = parseBody1[0]['price_usd'];
marketCapUsd = parseBody2[0]['market_cap_usd'];
console.log('searches complete');
console.log(price, marketCapUsd);
})
});
答案 2 :(得分:0)
你必须使用asise / await和promises。它模拟同步行为。
以下是一些示例:http://thecodebarbarian.com/common-async-await-design-patterns-in-node.js.html