出口连锁承诺的回报价值

时间:2019-07-01 07:25:30

标签: javascript jquery promise axios es6-promise

如何导出多重承诺的返回值。我需要将两个数据从第一个API导出到第二个API数据。这意味着将第一个数据插入一个数组,然后再将第二个数据插入该数组,然后从另一个.js文件中导出并使用。

我试图搜索如何在then()方法中返回值。但是,当我将导入的文件调用到另一个.js文件时,它会记录 [Promise,Promise,Promise ...]

API.js

function getAllData(url) {
    return axios.get(url, {
        headers: {
            "Accept": "application/json; odata=verbose"
        }
    }).then(response => response.data.d.results);
}

function getAllDataVHistory(data) {

    return data.map(i => axios.get(`urltwo?getID${i.Id}`).then(response => {
        return response.data;
    }));
}

export const final = () =>
    getAllData(`urlone`)
    .then(data => getAllDataVHistory(data));

Display.js

import {
   final
} from "./API.js";

final().then(en => {
    // return new Promise((resolve, reject) => {
    //   if (true) {
    //    return resolve(console.log(en));
    //   } else {
    //    return reject("promise failed");
    //   }
    // });
   console.log(en);
});

Console.log结果

(3) [Promise, Promise, Promise]

1 个答案:

答案 0 :(得分:1)

return data.map(i => axios.get(`urltwo`)

这将返回一个 promise数组

由于您要兑现承诺,因此您将获得该数组(因此,您在日志中看到的内容)。

您需要返回一个单个承诺,这样该承诺才能被采用。

Use Promise.all(array_of_promises)创建一个可以在数组中的所有promise都解决后解决的promise。