如何在使用redis时一个接一个地运行函数?

时间:2017-09-19 09:43:08

标签: node.js redis promise

我有以下代码

var arr1 =['1','2','3'];
client.sadd("arr1",arr1);
var arr2=['2','4','6'];
var arr3 =['3','6','9'];
client.sadd("arr2",arr2);
client.sadd("arr3",arr3);
client.sadd("arraylist",'arr1','arr2','arr3');
function getValue(value){
	client.smembers("arraylist",function(err,data){
		if(err) console.log(err);
		else {
			console.log(data);
		data.forEach(function(res){
			console.log(res);
			client.smembers(res,function(err,data){
				if(err) console.log(err);
				else data.forEach(function(val){
					if(val==value){
						client.sadd("validarr",res);
					    console.log("stored!")
					}
				})
			})
			
		
		})
		
		}
	})
}
  function randarr(){
	client.srandmember("validarr",function(err,response){
		if(err) console.log(err);
		else console.log(response);
	})
};


promise.resolve(getValue(2)).then(function()
{
	console.log("hey");
	promise.resolve(randarr()).then(function(){
		console.log("done")
	},function(err){console.log("error")})
})

我想在完成函数getValue的执行后执行函数randarr(),因为我想在下一个函数randarr()中使用保存的set validarr。

我尝试使用async.series。事实证明,这两个函数同时运行并按顺序打印输出。

所以通过使用promise.then我面临同样的错误 使用promises的代码输出:

hey 
done
connected
[ 'arr2','arr3',arr1']
arr2
arr3
arr1
null
stored!
stored!

函数没有按顺序执行。我应该使用什么来依次运行函数。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

尝试使用MULTI/EXEC commands

将事务命令实现到Redis中