遇到一个问题:下面是拿到一个数组返回,通过遍历返回一个值,我之前习惯用map去遍历。
const getCapture=async ()=>{ let result=await ipcRenderer.invoke('goCapture-event') for(const m of result){ if(m.name==='整个屏幕'){ let str=m.thumbnail.crop({x:0,y:0,width:1200,height:1170}) const imgSrc=str.toDataURL() return imgSrc } }/* result.map(m=>{ if(m.name==='整个屏幕'){ console.log(m) let str=m.thumbnail.crop({x:0,y:0,width:1000,height:1000}) const imgStr=str.toDataURL() return imgStr } })*/}
这是map的遍历:
result.map(m=>{ if(m.name==='整个屏幕'){ console.log(m) let str=m.thumbnail.crop({x:0,y:0,width:1000,height:1000}) const imgStr=str.toDataURL() return imgStr } })
这样返回的竟然是空,
但是如果用for,就可以正确返回:
for(const m of result){ if(m.name==='整个屏幕'){ let str=m.thumbnail.crop({x:0,y:0,width:1200,height:1170}) const imgSrc=str.toDataURL() return imgSrc } }
js中for和map还有这区别吗?
你这是基础的问题,你上面的getCapture执行后会 return
一个imgSrc,你想要的结果只是result中的一个值,它本身不是数组。我搞不懂你这边为什么要用map去执行,map的结果是返回数组,跟你原本的结果不一致,而且如果你要使用map,代码应该这样写:
const getCapture=async ()=>{ let result=await ipcRenderer.invoke('goCapture-event') return result.map(m=>{ if(m.name==='整个屏幕'){ console.log(m) let str=m.thumbnail.crop({x:0,y:0,width:1000,height:1000}) const imgStr=str.toDataURL() return imgStr } })[0] || ""; }
这样写才能有你上面代码的效果。
给你贴一个map简易的实现原理,我几年前写的,你对map的理解不够。
Array.prototype.myMap = function (fun) { const arr = []; for (let i = 0; i < this.length; i++) { const val = fun.call(this, this[i], i, this) arr.push(val); } return arr;}
你的if里面判断成功了才返回imgSrc ,如果判断不成功呢? 什么都不返回,那不就是空?
js基础不牢固啊,老弟
d232332
跟 Promise 一点儿关系都没有,甚至跟 map() 也没啥关系。这是最基本的 JS 语法问题。
const bar = (callback) => callback();const foo = () => { bar(() => { return 1; });}let ret = foo(); // undefined/* ----------------- */const foo = () => { for (;;) { return 1; }}let ret = foo(); // 1
看明白了吗?第一种写法里 foo
函数有返回值吗?你说你写了 return
,那是 bar
的回调函数里的返回值,foo
函数自己有吗?
map的回调函数内部用return语句,返回给了map内部的匿名函数,外层的getCapture函数没有接到,所以返回的是空,修改成这样接收:
//getCapture函数内部const mappedResult = result.map(m => { if (m.name === '整个屏幕') { console.log(m) let str = m.thumbnail.crop({x: 0, y: 0, width: 1000, height: 1000}) const imgStr = str.toDataURL() return imgStr } return undefined; }); return mappedResult.find(imgStr => imgStr !== undefined);
我正在努力理解如何在Javascript中获得一个承诺的值,以便能够检查它是真的还是假的。 如果我console.log有效变量,它将返回以下内容: 在我的if语句中,我试图检查允诺值是否为真,但我不知道如何访问该值:/谁能告诉我如何检查该值吗? 谢谢
我使用类型TreeMap定义了一个集合 我想返回与包含给定字符串值的列表配对的字符串(TreeMap键)。例如,我有一个字符串“bob”存储在列表中的一对中,我想返回与“bob”所在的对列表相关联的Treemap的键(字符串)。我将如何执行此操作?
问题内容: 背景 我正在尝试学习承诺,并且我有一个希望改进的承诺链。 问题 在学习如何链接承诺时,我看不到为什么有人愿意返回承诺而不是返回其价值。 以下面的示例为例,该示例使用了Promise链接: 在这里,我必须链接2次。但是,如果我直接从方法中返回结果而不是返回Promise,则可能会执行以下操作: 问题 如您所见,我有些困惑。 鉴于实际上是异步的,是否有可能实现与我的第二个代码示例中的代码相
我有这个功能: 在控制台中返回: Promise{[[PromiseState]]:"待定",[[PromiseValue]]:未定义} proto[[PromiseStatus]]:“已解决” 我需要访问对象中的名称/值对,但无法访问它们。我假设在将响应转换为json后,我需要多做一步,但我无法理解。如果有人能帮忙,我们将不胜感激!
本文向大家介绍Mybatis中返回Map的实现,包括了Mybatis中返回Map的实现的使用技巧和注意事项,需要的朋友参考一下 在Mybatis中,我们通常会像下边这样用: 返回一个结果 返回多个结果(其实这个和上边一样,只不过是查询条件的控制而已) 我们只要将上边的resultType改为java.util.HashMap,这会有生成下边这样 上这结果就是说,以User类的属性名为key,属性值
问题内容: 我想使用这样的Promise来调用Google Maps Geocoding API: 当我调用函数请求时,我发现我得到了一个Promise而不是一个值: 为什么不答应。然后在返回值之前执行?我如何从这个承诺而不是另一个承诺中获得价值? 问题答案: 如果您依赖承诺来返回数据,则必须从函数中返回承诺。 一旦调用堆栈中的1个函数异步,那么要继续线性执行,所有要调用它的函数也必须异步。(异步