即使我只有一个参数,我也会收到“包装承诺不可迭代错误”
Posted
技术标签:
【中文标题】即使我只有一个参数,我也会收到“包装承诺不可迭代错误”【英文标题】:I'm getting a 'Wrapped promise not iterable error' even though I have only one parameter 【发布时间】:2019-07-20 15:58:02 【问题描述】:我正在尝试在我的 node.js 微服务中使用 Promise.all。 Promise.all 的目的是遍历(查询)数组中的所有元素,并通过 apolloFetch 调用另一个微服务,然后在数据库中执行这些查询,然后返回成功或错误。我收到“包装的承诺不可迭代”错误 - 我检查了一些关于 SO 的帖子,它们有类似的错误,但在所有这些情况下,都传递了 2 个参数,而我只传递了一个 - 除了我是使用 apolloFetch 连接到另一个 MICROSERVICE,该 MICROSERVICE 接受每个查询(在数组中),然后对数据库执行一些操作。
有人能弄清楚我在这里做错了什么吗:
const QryAllBooks =
type: new GraphQLList(BookType),
args: ,
resolve()
return new Promise((resolve, reject) =>
let sql = singleLineString`
select distinct t.bookid,t.bookname,t.country
from books_tbl t
where t.ship_status = 'Not Shipped'
`;
pool.query(sql, (err, results) =>
if(err)
reject(err);
resolve(results);
const str = JSON.stringify(results);
const json = JSON.parse(str);
const promises = [];
for (let p = 0; p < results.length; p++)
const book_id = json[p].bookid;
const query = `mutation updateShipping
updateShipping
(id: $book_id, input:
status: "Shipped"
)
bookid
bookname `
promises.push( query );
//I need an await function so that previous apolloFetch
//goes in sequence of bookid, one after the other
Promise.all( promises.map(p=>apolloFetch(p)) ).then((result) =>
resolve();
console.log("success!");
)
.catch(( e ) =>
FunctionLogError( 29, 'Error', e );
);
);
);
;
module.exports =
QryAllBooks,
BookType
;
【问题讨论】:
【参考方案1】:代码获取调用apolloFetch
的返回值,并无条件地将其提供给Promise.all
。
我认为答案是:
谁能弄清楚我在这里做错了什么
是,您不允许apolloFetch
返回与可迭代集合不同的内容。
改为调用apolloFetch
,判断是否返回值是可迭代的;只有如果它是可迭代的,调用Promise.all
。
如果apolloFetch
返回的不是可迭代对象,您需要决定代码的行为方式。目前它引发了一个错误,这显然不是你想要的;但你需要决定在这种情况下你想要什么。
【讨论】:
好的,所以我克服了错误并使用 map 函数来分隔数组中的每个项目,这本质上是一个查询,但现在我收到一个错误,即查询没有被传递.我更新了上面的代码以反映我的尝试。 @RogerDodger,感谢您报告这就是答案。你能把这个答案标记为正确吗?您的单独问题应作为一个新问题提出,并结合读者理解该新问题所需的上下文。 bignose - 这不是答案 - 我克服了一个错误,但现在我在 'p' 中得到一个空值,它作为 apolloFetch 调用的参数传递。我什至不知道我是否走在正确的轨道上,因为我无法确认我进行 apolloFetch 调用的方式是否合法。如果我接受它作为答案,接下来要如何找出并解决我的问题? @RogerDodger,一个问题引出新问题是正常的。我们处理这个问题的方式是保留原始问题(如果他们正确回答原始问题,则将答案标记为正确),然后根据需要创建新问题。 我按照您的建议做了,并在此处创建了另一个后续问题(除非我得到可行的解决方案,否则我不会将其标记为已回答):***.com/questions/54908549/…以上是关于即使我只有一个参数,我也会收到“包装承诺不可迭代错误”的主要内容,如果未能解决你的问题,请参考以下文章
为啥即使实现了 Iterable,我也会收到 foreach 编译器错误?
为啥即使我使用 sparse_categorical_crossentrpy,我也会收到“收到超出 [0, 1) 有效范围的标签值 6”?
即使我将变量分配为 var,我也会收到“Val 无法重新签名错误”?
即使代码在 try/catch 块中,我也会不断收到异常 [关闭]