setTimeout
само по себе не возвращает обещание - оно основано на обратном вызове.Если вы хотите использовать функцию обратного вызова в цепочке Promise, вам необходимо явно преобразовать ее в Promise:
let x = Promise.resolve()
x.then(() => {
return new Promise(resolve => {
setTimeout(() => {
console.log("after 500ms");
resolve();
}, 500);
});
}).then(() => console.log("after 1st then"))
Что касается вашего нового вопроса, вам нужно будет hello
вернуть обещание, а затем вернуть вызов hello
, чтобы он мог быть прикован цепью:
function hello() {
return new Promise(resolve => {
setTimeout(() => {
console.log("after 500ms");
resolve();
}, 500);
});
}
let x = Promise.resolve()
x.then(() => {
return hello()
}).then(() => console.log("after 1st then"))