gpt4 book ai didi

javascript - 厄运金字塔

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:33 25 4
gpt4 key购买 nike

我有一个到 Node.js Express 应用程序的路由代码,我正在尝试使用 q 来使用 Promise,而不是进入“回调 hell ”。我在上面添加了一个“服务层”,需要进行两次调用,并返回一个包含来自两个函数的数据的 json 结构。

var express = require('express');
var q = require('q');
var service = require('./../model/service');
var router = express.Router();

router.get('/trips', function(req, res, next) {
service.getAllTrips(function(err, trips) {
if (err) throw err;
service.getPeopleForTrips(function(err, people) {
if (err) throw err;
var json = {
trips: trips,
people: people
};
return res.json(json);
});
});
});
module.exports = router;

我尝试将两个服务调用分离为 q 示例所示的 here ,但仍然无法让它工作或如何构建这个示例。感谢您提前提供的帮助。

这是我尝试过的:

q.fcall(service.getAllTrips)
.then(service.getPeopleForTrips)
.then(function (data1, data2) {
console.log(data1);
console.log(data2);
})
.catch(function (error) {
console.log(error);
})
.done();

最佳答案

您可以使用q.nfcall()对于以 cb(err, result) 格式接受回调的 Node 样式函数。顺序形式:

var trips;
q.nfcall(service.getAllTrips)
.then(function(data){
trips= data
return q.nfcall(service.getPeopleForTrips)
})
.then(function (people) {
console.log(trips, people);
})
.catch(function (error) {
console.log(error);
})
.done();

使用 q.all 您可以并行运行 Promise 数组,然后使用 q.spread将返回的数组作为履行处理程序的参数展开:

q.all([
q.nfcall(service.getAllTrips),
q.nfcall(service.getPeopleForTrips)
]).spread(function(trips, people){
console.log(trips, people);
})
.catch(function (error) {
console.log(error);
})
.done();

关于javascript - 厄运金字塔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31129244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com