代码之家  ›  专栏  ›  技术社区  ›  hsel

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

  •  0
  • hsel  · 技术社区  · 8 年前

    我该如何依次通过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 回复  |  直到 8 年前
        1
  •  1
  •   Shivam    8 年前

    功能 getPrice getMarketCap 应该回报承诺。 既然您已经在使用请求承诺,您只需返回它,

    类似于

    function getPrice(website) {
        return rp(website)
        .then(function (body) {
            parseBody1 = JSON.parse(body);
            price1 = parseBody1[0]['price_usd'];
            console.log('price searched');
        });
    }
    

    而且您正在同步调用它们,所以 getMarketCap 不会等待 获取价格 完成。

    以实现串行流。你应该打电话 getMarketCap 仅post 获取价格 完成了。

    类似于

    getPrice('https://api.coinmarketcap.com/v1/ticker/ethereum/?convert=usd')
    .then(() => {
       return getMarketCap('https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=usd');
    })
    
        2
  •  0
  •   Rahul Sharma    8 年前

    试试这个

    $('#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);
        })
    });
    
        3
  •  0
  •   C.Dumange    8 年前

    您必须使用async/await和promises。它模拟同步行为。

    以下是一些示例: http://thecodebarbarian.com/common-async-await-design-patterns-in-node.js.html

    推荐文章