我正在使用dockerode來從node.js中操作docker。它自己的圖書館不是問題,但我與PROMISE有問題。看起來承諾不等待解決。Node.JS - 承諾不會等待解決
下面的代碼我預期的結果應該是:
Start
Middle // (or Err if docker does not running)
End
但我收到:
Start
End
Middle
似乎承諾不等待繼續的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');
複製並粘貼代碼上https://npm.runkit.com/dockerode或在這裏看到的結果是:https://runkit.com/embed/y3wvg6ktecb9
在'promise.then'之前加上'await'(並將所有東西包裝在'async function'中)。 – 2017-08-06 22:48:40
這就是一個承諾如何工作......解決什麼時候準備好,這可能是你的兩個同步console.log()之後的幾年... – WilomGfx
@torazaburo沒有必要,這只是承諾的語法糖。 – WilomGfx