等待请求完成然后转到下一个

时间:2018-02-08 06:14:51

标签: javascript node.js promise request

我如何通过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);
});

3 个答案:

答案 0 :(得分:1)

函数getPricegetMarketCap应该返回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