代码之家  ›  专栏  ›  技术社区  ›  KARTHIKEYAN.A

许诺全部返回[null,null],不按预期返回

  •  0
  • KARTHIKEYAN.A  · 技术社区  · 6 年前

    我写了一个 promise.all 函数如下,它没有返回我的预期结果。

    if (Array.isArray(data)) {
        return Promise.all(data.map((data) => {
            hook.app.service('location')
            .find({ query: { serviceLocationId:"100" } })
            .then((result) => {
                var startDept = result.data[0];
                if (result.data.length > 0) {
                    data.problem.solutions.solution.routes.route.forEach((d) => {
                        d.stops.unshift({
                            serviceType: '',
                            orders: [],
                            travelTime:'',
                            travelDistance:'',
                            travelCost:'',
                            serviceTime: '',
                            serviceTimeCost:0,
                            tripNumber:0,
                            stopName : startDept.description,
                            arrivalTime:'',
                            departureTime : 36000.0,
                            locationType : startDept.locationType,
                            sequence : 0,
                            locationId : startDept.serviceLocationId,
                            lng : startDept.location.lng,
                            lat : startDept.location.lat
                        });
                        var endDept = d.stops.pop();
                        d.stops.push({
                            serviceType: '',
                            orders: [],
                            travelTime:endDept.travelTime,
                            travelDistance:endDept.travelDistance,
                            travelCost:endDept.travelCost,
                            serviceTime: '',
                            serviceTimeCost:0,
                            tripNumber:0,
                            stopName : startDept.description,
                            arrivalTime : endDept.arrivalTime,
                            departureTime:'',
                            locationType : startDept.locationType,
                            sequence : endDept.sequence,
                            locationId : endDept.locationId,
                            lng : startDept.location.lng,
                            lat : startDept.location.lat
                        });
                    });
                    hook.data = data;
                    combineArr = [];
                    return routes(hook).then((hook) => {
                        if ([hook.data].length > 0) {
                            combineArr.push(hook.data);
                            return combineArr;
                        } else {
                            next(new Error('routes response create failed'));
                        }
                    }).catch((err) => { return next(new Error(err.error)); });
                } else {
                    next(new Error('no depo found'));
                }
            }).catch(err=>{ return next(new Error(err.error)); });
        })).then((results) => {
            console.log(results);
            hook.result = results;
            next();
        });
    }
    

    以上承诺回报 [null, null] . 我没有得到预期的结果。请帮我解决这个问题。

    1 回复  |  直到 6 年前
        1
  •  7
  •   T.J. Crowder    6 年前

    你不会从 map 回调,因此生成的数组是 undefined 回来 你在回调中得到的承诺,所以这个数组是一个承诺数组。

    return Promise.all(myArray.map(entry => {
        getAPromise(entry);
    }));
    

    ...你应该在哪里做

    return Promise.all(myArray.map(entry => {
        return getAPromise(entry);
    }));
    

    return Promise.all(myArray.map(entry => getAPromise(entry)));