异步在javascript中等待诺言

问题描述 投票:-2回答:1

我正在尝试执行这些api调用。我只想在加载这两个函数后才调用另一个函数。我正在尝试对async和await做同样的事情,但是我的代码出了点问题,在同时加载两个api之前会调用console.log。

var app= {
getLinkedinData:function(url, callback){

    var access_token = app.getParameterByName("access_token");
    console.log(access_token)

    if(access_token == "" || access_token == null) {
        return false;
    }


    var form = new FormData();
    var settings = {
      "url": url,
      "method": "GET",
      "timeout": 0,
      "headers": {
        "Authorization": "Bearer "+ access_token
      },
      "processData": false,
      "mimeType": "multipart/form-data",
      "contentType": false,
      "data": form
    };

    $.ajax(settings).done(callback);

},
getLinkedinEmail: function(){

    var url = `https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))`;
    return new Promise(function(resolve,reject){
        app.getLinkedinData(url, function(response) {
            var parsed = JSON.parse(response);
            var emailId = parsed.elements[0][`handle~`].emailAddress;
            app.linkedinObj.email = emailId;
            // console.log(app.linkedinObj)
            resolve(parsed);
        })
    })

},

getLinkedinProfile: function(){
    var url = `https://api.linkedin.com/v2/me`;

    return new Promise(function(resolve, reject){
        app.getLinkedinData(url, function(response) {

            var parsed = JSON.parse(response);
            app.linkedinObj.firstName = parsed.localizedFirstName;
            app.linkedinObj.lastName = parsed.localizedLastName;
            app.linkedinObj.id = parsed.id;
            app.linkedinObj.profilePicture = parsed.profilePicture.displayImage;
            // console.log(app.linkedinObj)
            resolve(parsed);
        })

    })
},

};



$(document).ready(function () {
  async function wait() {
    await Promise.all([
              app.getLinkedinProfile(),
              app.getLinkedinEmail()
        ]); 
  }

    wait().then(console.log(app.linkedinObj));
});

请帮助我提供代码。

javascript async-await es6-promise
1个回答
0
投票

我将API调用更新为Promise之后,它开始起作用。我也更新了同样的问题。

async function wait() {
    const result1 = Promise.all([app.getLinkedinProfile(), app.getLinkedinEmail()]);
    console.log(result1)
}

wait();
© www.soinside.com 2019 - 2024. All rights reserved.