Mengenai apa itu janji dan apakah masalah yang diselesaikannya, sila alami kaedah pengekodan tak segerak panggilan balik nod dan teruskan ke http://wiki.commonjs.org/wiki/Promises/A Lihat Ia bergantung pada bagaimana ia ditakrifkan, jadi saya tidak akan pergi ke butiran di sini.
Di sini kita melihat cara menggunakan q.js untuk melaksanakan janji api nod.
1. Semuanya bermula dengan pemasangan
npm pasang q
2. Kaedah janji api gaya nod piawai
1. Gunakan Q.nfcall
Berbanding dengan Q.fcall, Q.nfcall ialah Q.fcall bagi nod.
var FS = memerlukan('fs'),
Q = memerlukan('q'),
warna = memerlukan('warna'),
Fail = 'example.txt';
var fsReadFile = Q.nfcall(FS.readFile,fail,pengekodan);
fsReadFile.then(fungsi(hasil){
console.log((“invoke in nfcall ” file).red);
console.log(hasil.hijau);
},fungsi(ralat){
console.log(“invoke in nfcall”.red);
console.log(error.toString().red);
}
);
2. Gunakan Q.denodeify
var fsReadFile_denodeify = Q.denodeify(FS.readFile);
fsReadFile_denodeify(fail,pengekodan).kemudian(fungsi(hasil){
console.log("invoke in denodeify".red);
console.log(hasil.hijau)
},fungsi(ralat){
console.log("invoke in denodeify".red);
console.log(error.toString().red);
}
);
3. Gunakan Q.deferd
var fsReadFile_deferd = fungsi(fail,pengekodan){
var tertunda = Q.defer();
FS.readFile(fail,pengekodan,fungsi(ralat,hasil){
Jika(ralat){
deferred.reject(error.toString().red);
}
deferred.resolve(result);
});
pulangan tertunda.janji;
};
fsReadFile_deferd(fail).kemudian(fungsi(hasil){
console.log("invoke in deferd".red);
console.log(result.toString().green);
},fungsi(ralat){
console.log("invoke in deferd".red);
console.log(error.toString().red);
}
);
4. Gunakan makeNodeResolver()
var fsReadFile_makeNodeResolver = fungsi(fail, pengekodan){
var tertunda = Q.defer();
FS.readFile(fail,pengekodan,deferred.makeNodeResolver());
Pulangan tertunda.janji;
};
fsReadFile_makeNodeResolver(fail,pengekodan).kemudian(fungsi(hasil){
console.log("invoke in makeNodeResolver".red);
console.log(hasil.hijau);
},fungsi(ralat){
console.log(error.toString().red);
});