当我需要像const promise一样导入promise = require('promise')具有.then的属性时

时间:2019-05-12 08:31:45

标签: node.js promise

我是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属性,将返回诺言。但为什么? 您能否解释一下承诺的功能和承诺的使用范围。预先感谢。

1 个答案:

答案 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