2015-08-11 3 views
0

У меня есть установка промежуточного программного обеспечения в узле для выполнения задачи и вызова после успеха или неудачи. Задача вызывается после запуска начального блока обещаний. Это называется в .then функции:Узел, передающий параметры через Q сервисное обещание

var Q = require('q'); 

var dataPromise = getCustomerId(); 

dataPromise 
    .then(function(data) { 
     getGUID(req, res, next); 
     }, function(error) { 
     console.log('Failure...', error); 
    }); 

}; 

Сервер висит, хотя, потому что (REQ, Рез, следующий) параметры все неопределенными, когда в контексте .then функции.

Вот функция getCustomerId:

var getCustomerId = function() { 

var getCustomerIdOptions = { 
    options... 
}; 

var deferred = Q.defer(); 
request(getCustomerIdOptions, function(err,resp,body){ 
    if(err){ 
    deferred.reject(err); 
    console.log(err); 
    return; 
    }else{ 
    deferred.resolve(body); 
    } 

}); 
return deferred.promise; 
}; 

Что бы правильный способ передать эти параметры в функции, называемой в .then блоке?

EDIT: Параметры (req, res, next) от внешней функции и доступны, когда getGUID (req, res, next) вызывается за пределами блока .then().

var assureGUID = function(req, res, next) { 
    if(app.locals.guid){ 
    next(); 
    return; 
} 

var dataPromise = getCustomerId(); 

dataPromise 
    .then(function(data) { 
     getGUID(req, res, next) 
    }, function(error) { 
    console.log('Failure...', error); 
    }).; 
}; 
+1

Не могли бы вы показать нам, откуда взялись эти аргументы? Скорее всего, вам не хватает всей функции обертывания, которая зарегистрирована в среде промежуточного программного обеспечения, которая должна их предоставить. –

+0

Я добавил свою внешнюю функцию, которая имеет доступные параметры. – byrdr

+0

- экспресс-приложение? –

ответ

0

Не уверен, что вы пытаетесь сделать точно, но вы можете назвать вашу функцию посыла внутри экспресс-функции общего промежуточного типа следующего образца.

var express = require('express'); 
var $q = require('q'); 
var request = require('request'); 


var app = express(); 

// Middleware 1 
app.use(function(req, res, next) { 
    console.log('i\'m the first middleware'); 

    getCustomerId().then(function(body) { 
    console.log('response body', body); 
    return next(); 
    }, 
    function(err) { 
    console.log('Error on middlware 1: ', err); 
    }); 

}); 


// Middleware 2 
app.use(function(req, res, next) { 
    console.log('i\'m the second middleware'); 
    return next(); 
}); 


app.get('/', function(req, res) { 
    res.send('hi world'); 
}); 


app.listen(3000); 


// Your custom function definition 
function getCustomerId() { 

    var deferred = $q.defer(); 

    request('http://someurltogetjsondata/user/id', function(err, resp, body) { 
    if(err) return deferred.reject(err); 
    deferred.resolve(body); 
    }); 

    return deferred.promise; 
} 

Надеюсь, это поможет немного, удачи.

Смежные вопросы