链接承诺-等待异步Foreach循环

时间:2019-11-24 05:23:56

标签: node.js foreach async-await

我正在努力了解诺言链的实际运作方式。

我正在尝试调用API A-以获取所有书籍。然后,我想调用API B-为我提供书籍说明。

但是在Bookdescribe方法上(请参见代码的最后部分),当我进行调试时,Promise值是未定义的。

如何将值返回到/ getAllbooks路径?

index.js

.get('getAllBooks', '/getAllBooks', async (ctx) => {
            try {
var util = require('../util')
var result = await util.getAllBooks(conn)

}

util.js-getAllbooks方法

async function getAllBooks(conn) {
        return new Promise((resolve, reject) => {
            var books = []

            conn.describeGlobal(function (err, res) {
                if (err) {
                    return console.log(err)
                }
                console.log('No of Objects ' + res.sobjects.length)
                res.sobjects.forEach(function (sobject) {
                     if (sobject.type == "book"){
                        books.push(sobject)  }
                })    
                resolve(books)
            })
        }).then(result => booksDescribe(conn, result))
    }

util.js-booksDescribe方法

    async function booksDescribe(conn, result) {
    var i = 0;
        var something = await Promise.all(result.map(async (item) =>{
           await conn.sobject(item).describe(function (err, meta) {
                if (err) {
                    return console.log("What? " + err);
                }

                const content = meta.description

                return content

            })  
        }))
}

1 个答案:

答案 0 :(得分:0)

 async function booksDescribe(conn, result) {
    var i = 0;
        var something = await Promise.all(result.map(async (item) =>{
           await conn.sobject(item).describe().then(response  => {
                return(response)

            })  
        }))
}