【问题标题】:Return a promise from a custom function从自定义函数返回一个承诺
【发布时间】:2015-04-27 03:05:26
【问题描述】:

最初是在GitHub上提问的


嗨,

你能告诉我如何使用蓝鸟从自定义函数返回一个承诺吗?这是我正在使用的:

var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var P = require('bluebird');

var redisSessionStore = new RedisStore({client: redisClient});
P.promisifyAll(redisSessionStore);

redisSessionStore.getAsync('active_session').then(function(data) {  
    if(!data || (data.timestamp < Data.now())) {
        return sulogin(params);
    }
}).then(function(values) { // expecting sulogin to return a promise
  // do another async call
});

function sulogin(params){

}

如何让 sulogin 返回一个承诺?

【问题讨论】:

  • 这个库是你写的,对吧?
  • 是的,但我只是从 github 重定向这个
  • @georg 他代表我发布了这个,因为我最初将这个发布到github.com/petkaantonov/bluebird/issues/510
  • 啊,好吧,这有点混乱。
  • @drecute sulogin 看起来像什么?这里只是空荡荡的......

标签: javascript node.js redis promise bluebird


【解决方案1】:

我将 sulogin 修改为如下所示:

var http = require('http');
var Promise = require('bluebird');

function sulogin(arg, fn) {
    Promise.props({
        host:"localhost",
        port: 8080,
        path: '/uaa/login.do',
        method: 'POST',
        headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    }).then(function(result) {
        return http.requestAsync(result);
    });
}

感谢https://github.com/petkaantonov/bluebird/issues/196

【讨论】:

  • 那个 props 调用是没有意义的——你可以只在字面上使用requestAsync。也不要忘记return承诺
猜你喜欢
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2015-11-27
  • 2017-05-20
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多