javascript - JavaScript 中的 Promise 问题
问题描述
我是新来的。我将不胜感激。最后一行代码不起作用。不知道如何解决。我知道第二个“then”必须返回 resolve() 但是如何实现它
let getNumber = new Promise((resolve) => {
//API
EthereumNote.getAmountOfMyNotes(function(error, result) {
if (!error) {
let AmountOfMyNotes = Number(result)
resolve(AmountOfMyNotes)
console.log(result)
} else
console.error(error)
})
}).then(result => {
return new Promise((resolve) => {
for (let i = 0, p = Promise.resolve(); i < result; i++) {
p = p.then(_ => new Promise(resolve => {
//API
EthereumNote.getMyNote(i, function(error, result) {
if (!error) {
let text = String(result[0])
let noteID = Number(result[1])
console.log(text)
console.log(noteID)
resolve()
} else
console.error(error)
})
}));
}
})
}).then(() => console.log('Hi!')) // this one doesn't work
解决方案
避免Promise
构造函数反模式!可以做一个new Promise
to wrap EthereumNote.getMyNote
,不能把循环换行。你从来没有resolve()
那个外在的承诺。
相反,只需返回您创建的承诺链p
:
let getNumber = new Promise((resolve) => {
//API
EthereumNote.getAmountOfMyNotes(function(error, result) {
if (error) reject(error);
else resolve(Number(result));
})
}).then(amountOfMyNotes => {
console.log(amountOfMyNotes);
var p = Promise.resolve();
for (let i = 0; i < amountOfMyNotes; i++) {
p = p.then(_ => new Promise((resolve, reject) => {
//API
EthereumNote.getMyNote(i, function(error, result) {
if (error) reject(error);
else resolve(result);
});
})).then(result => {
let text = String(result[0])
let noteID = Number(result[1])
console.log(text)
console.log(noteID))
});
}
return p;
}).then(() => {
console.log('Hi!'); // this one now works
}, err => {
console.error(err);
});
推荐阅读
- stored-procedures - 我有一个返回动态列的存储过程(使用 Pivot)我想将存储过程与 RDLC 报告绑定
- javascript - 在 Internet Explorer 中隐藏元素会在屏幕上留下伪影 (IE 10-11)
- pandas - Pandas 为大型数据框跨列应用条件
- laravel - Validating not all fields in form - Laravel
- spring-boot - 如何在 Spring Boot 千分尺中为 New Relic Insights 传递应用程序名称
- c++ - 如何输入每个单词都在字符串数组中的句子,直到用户按下回车键
- angular - 如何在 Angular 8 中创建具有反应形式的动态表?
- javascript - Javascript 使用 ES6 映射从对象数组中提取键
- sql-server - UNION 中的子查询选择不保留顺序
- c# - “我可以像在数组中那样使用索引来遍历列表。为什么我不能像在使用索引的数组中那样在列表中添加项目。”