我是Node js的新手。我在使用node js的promise属性时感到非常困惑。一些示例显示了我何时需要使用Promise,但我需要使用Promise,但其中一些示例却表示不满意。
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
const dboper = require('./operation');
const url = 'mongodb://localhost:27017/';
const dbname = 'conFusion';
MongoClient.connect(url)
.then((client) => {
console.log('Connected correctly to server');
const db = client.db(dbname);
dboper.insertDocument(db, { name: "Vadonut", description: "Test"},"dishes")
.then((result) => {
console.log("Insert Document:\n", result.ops);
return dboper.findDocuments(db, "dishes");
})
.then((docs) => {
console.log("Found Documents:\n", docs);
return dboper.updateDocument(db, { name: "Vadonut" }, { description: "Updated Test" }, "dishes");
})
.then((result) => {
console.log("Updated Document:\n", result.result);
return dboper.findDocuments(db, "dishes");
})
.then((docs) => {
console.log("Found Updated Documents:\n", docs);
return db.dropCollection("dishes");
})
.then((result) => {
console.log("Dropped Collection: ", result);
return client.close();
})
})
.catch((err) => console.log(err));
Here .then is used in chained manner. But no promise word is used here.
function readFile(data){
return new Promise((resolve, reject)=>{
fs.readFile(data, function(err, buf) {
if(err){
console.log("Error : "+ err);
reject("Rejected");
}
else{
a = buf.toString();
console.log(a);
resolve();
}
});
});
}
readFile(text)
.then(()=>{
const origin = fs.createReadStream('1.txt', {flags: 'r'});
const destination = fs.createWriteStream('input.txt', {flags: 'w+'});
origin.pipe(destination);
})
.catch(function (err) {
console.log("Error: "+err)
});
此处使用.then属性,将返回诺言。但为什么? 您能否解释一下承诺的功能和承诺的使用范围。预先感谢。
答案 0 :(得分:0)
对于[ 'Thimphu', 'FALSE', 'New York', 'TRUE','Tokyo', 'FALSE', 'Japan', 'FALSE', 'India', 'FALSE']
[ 'Thimphu', 'FALSE','Tokyo', 'FALSE', 'Japan', 'FALSE', 'India', 'FALSE' 'New York', 'TRUE',]
而言,不必进行初始化,因此,在拥有Promise
链的情况下,它起作用,因为.then
返回了Promise。
例如在dboper.insertDocument
doper
这使您可以根据function insertDocument() {
return new Promise((resolve, reject) => {
// do some stuff
// resolve
});
}
的结果调用.then
。
您要问的另一件事是为什么它们可链接,这是因为insertDocument()
总是返回Promise,无论您在其中执行什么操作。
例如
.then