Javascript Node.JS-承诺不会等待解决

Javascript Node.JS-承诺不会等待解决,javascript,node.js,promise,Javascript,Node.js,Promise,我正在使用node.js中的for docker。图书馆本身不是问题,但我对承诺有问题。似乎承诺并不等待解决 下面的代码是我预期的输出: Start Middle // (or Err if docker does not running) End 但我收到: Start End Middle 似乎promise并没有等待javascript继续运行。我做错了什么 const Docker = require('dockerode') let docker = new Docker();

我正在使用node.js中的for docker。图书馆本身不是问题,但我对承诺有问题。似乎承诺并不等待解决

下面的代码是我预期的输出:

Start
Middle // (or Err if docker does not running)
End
但我收到:

Start
End
Middle
似乎promise并没有等待javascript继续运行。我做错了什么

const Docker = require('dockerode')
let docker = new Docker();

console.log('Start');
let promise = new Promise(function (resolve, reject) {
    docker.listContainers({all: true}, function (err, data) {
        if (err) {
            reject(err)
        } else {
            resolve(data);
        }
    });
});

promise.then(function (data) {
    console.log('Middle');
}, function (err) {
    console.log('Err');
});

console.log('End');

复制并粘贴此代码或在此处查看结果:

您的输出是正确的,您误解了承诺的工作原理

承诺是,它们在同一个任务中运行。这意味着在同步代码段运行时不会解决任何承诺

//输出'a','c','b'
console.log('a');
然后(()=>console.log('b');

console.log('c')您的输出是正确的,您误解了承诺的工作方式

承诺是,它们在同一个任务中运行。这意味着在同步代码段运行时不会解决任何承诺

//输出'a','c','b'
console.log('a');
然后(()=>console.log('b');

console.log('c')添加
承诺之前等待
。然后
(并将整个过程包装在
异步函数中
)。承诺就是这样工作的。。。解析何时准备就绪,这可能是几年后的两个同步控制台。log()…@torazaburo没有必要,这只是承诺的语法糖。@WilomGfx我完全知道它是什么。我的意思是,这是一种编写代码的方法,它在继续执行
控制台.log('End')
之前等待承诺。在
承诺之前添加
等待
。然后
(并将整件事包装在
异步函数中
)。承诺就是这样工作的。。。解析何时准备就绪,这可能是几年后的两个同步控制台。log()…@torazaburo没有必要,这只是承诺的语法糖。@WilomGfx我完全知道它是什么。我想说的是,这是一种编写代码的方法,在继续执行
console.log('End')
之前等待承诺实现。只是代码注释中的一个输入错误:第二个和第三个代码段输出“a”、“b”、“c”。是的。我误解了诺言。我正在迁移到node.js,一些概念对我来说真的很新。但是谢谢你。解释得很好。只是代码注释中的一个输入错误:第二个和第三个代码段输出“a”、“b”、“c”。是的。我误解了诺言。我正在迁移到node.js,一些概念对我来说真的很新。但是谢谢你。解释得很好。