在promises之间发送参数

时间:2016-11-09 09:19:44

标签: node.js asynchronous

我正在使用node.js进行异步处理。使用承诺。我的代码是这样的:

var net = require('net');
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('MyBBDD.db');
var net = require('net');
var Q = require("q");

var firstFunction = function(v_user, v_mystring){
    var deferred = Q.defer();
    var mi;
    stmt = db.prepare("SELECT text1 FROM my_table WHERE user = ?");
    stmt.bind (v_user);
    stmt.get(function(error,row){
        if(!error && row){
                deferred.resolve({string: v_mystring, query: row.text1});
        }
            deferred.reject(new Error(error));
    });
    return deferred.promise;    
};

var secondFunction = function(result){
    console.log(result.string);
    console.log(result.query);
};

firstFunction('user000','Hello').then(secondFunction);

我的代码中的所有代码工作正常但是现在,我想在secondFunction中连接我从firstFunction收到的字符串和其他字符串,例如“MyNewString”。 有人知道如何解决它?我可以从我的firstFunction向我的secondFunction发送“MyNewString”吗? 提前谢谢。

最好的问候。

1 个答案:

答案 0 :(得分:0)

最好解决它将解决与对象的承诺。而不是只返回一个值 - 查询DB的结果,您可以返回覆盖所需值的对象。

使用bind



function firstFunction(string) {
  return Promise.resolve({string: string, query: 'some result of query'})
}

function secondFunction(otherText, result) {
  console.log(result.query) // you have still access to result of query
  return result.string + otherText
};

firstFunction('foo').then(secondFunction.bind(null, 'bar')).then(console.log);




关闭



function firstFunction(string) {
  return Promise.resolve({string: string, query: 'some result of query'})
}

function secondFunction(text) {
  return function(result) {
    return result.string + text
  }
};

firstFunction('foo').then(secondFunction('bar')).then(console.log);




使用匿名函数表达式



function firstFunction(string) {
  return Promise.resolve({string: string, query: 'some result'})
}

function secondFunction(text, otherText) {
  return text.string + otherText
};

firstFunction('foo').then(function(result) {
  return secondFunction(result, 'bar')
}).then(console.log);