我想使用Javascript promises三次执行相同的功能。每次调用该函数时,都会逐行读取文本文件,并将每行的答案写入另一个文本文件。我希望javascript承诺等到上一个函数完成,但由于某种原因它只是立即运行三个函数,从而一次写入三个文件。由于我正在处理大量文件,因此一次写入三个文本文件需要很长时间。
有人可以帮我弄清楚如何正确运行吗?我是Promises的新手,需要我能得到的所有帮助。
这是我的代码:
function verifyTransactions(fileName,functionName,obj,depth){
var rd = readline.createInterface({
input: fs.createReadStream('../paymo_input/stream_payment.csv'),
output: process.stdout,
terminal: false
});
rd.on('line', function(line) {
var userData = extractUserData(line)
if (userData !== undefined){
var id1 = userData[0], id2 = userData[1];
if (obj[id1]){
console.log(id1)
fs.appendFileSync('../paymo_output/'+fileName +'.txt',functionName(obj,id1,id2,depth)+"\n", "UTF-8",{'flags': 'a'});
}
else{
console.log("nope")
fs.appendFileSync('../paymo_output/'+fileName+'.txt', "unverified"+"\n", "UTF-8",{'flags': 'a'});
}
}
});
rd.on('end',function(){
console.log("ON TO THE NEXXTTTTT")
})
}
Promise.resolve("output1")
.then(function(file){
verifyTransactions(file,pastTransaction,userTransactions);
console.log("WRITING TO FILE TWO SOON")
return "output2";})
.then(function(file){
verifyTransactions(file,breadthFirstSearch,userTransactions,2);
return "output3";})
.then(function(file){
verifyTransactions(file,breadthFirstSearch,userTransactions,4);
return "FINITO!!!";})
.then(function(file){
console.log(file);
})
答案 0 :(得分:2)
如果你想使用Promise等到一个函数完成它的工作,你需要做三件事:
.then()
完成的。:
function myFunction(input) {
var promise = new Promise();
/* do some things, then: */
someEventEmitter.on('myEvent', function() {
promise.resolve(returnValue); // all done!
});
return promise;
}
myFunction(input1)
.then((function(result) { // run this function once the Promise has resolved
console.log('myFunction returned: ' + result);
});
如果你想使用Promises按顺序执行几个异步操作,你需要做一些叫做promise chaining的事情:
myFunction(input1) // returns a Promise, which has a .then() method
.then(function(result) {
console.log('first result: ' + result);
return myFunction(input2); // return a new Promise from inside of the function passed to .then()
}) // this new Promise has a .then() method of its own
.then(function(result2) {
console.log('second result: ' + result2);
return myFunction(input3);
})
.then(function(result3) {
console.log('third result: ' + result3);
});