如何导出承诺结果?

时间:2017-03-22 17:09:08

标签: javascript promise es6-promise

很抱歉,如果这个问题很愚蠢。

此代码正常运行。在成功解决所有承诺后,我只需要导出数据变量。

我无法将此代码用于函数和导出变量。因为在这种情况下,此函数将导出一个空数组。

'use strict'

import urls from './urls'
import getData from './get-data'

getData(urls).then((responses) => {
    const data = []
    const results = responses.map(JSON.parse)

    for (let i = 0, max = results.length; i < max; i++) {
        // some magic and pushing 
    }

    return data
}).catch(error => console.log(error))

4 个答案:

答案 0 :(得分:8)

您可以轻松地将其分配给导出的变量,但不应该这样做 - 分配是异步发生的,并且在导入变量的模块中可能会先读取变量。

相反,只需导出promise 1

// data.js
import urls from './urls'
import getData from './get-data'

export default getData(urls).then(responses =>
    responses.map(JSON.parse).map(magic)
);

// main.js
import dataPromise from './data'

dataPromise.then(data => {
    console.log(data);
    …
}, console.error);

1:在proposed top-level await出现之前,您可以在导出之前等待该值。

答案 1 :(得分:1)

今天你要做

foo.js

const wait = ms => new Promise(r => setTimeout(() => r(), ms))

async function foo() {
    console.log('called')
    await wait(1000)
    return 'hi'
}

export default foo()

index.js

import foo from './foo'

void (async function() {
    console.log(foo)
    console.log(await foo)
    console.log(await foo)
})()

输出

> called
> Promise { <pending> }
> hi
> hi

在开始时获取数据很有用

答案 2 :(得分:0)

您可以通过简单地在要从中导出的模块中解析promise来导出promise结果,然后在then()块中使用exports.variable_name = promiseResult;

例如: 我想在整个应用程序中使用数据库连接。但是接通电话给了我一个诺言。 所以我可以简单地调用promise.then然后阻止,导出我想要的结果。 Connection.js文件

async function connect() {
    connection = await oracledb.getConnection(config)
if (connection) {
    return connection;
} else {
    return null;
  }
}

connect().then((res) => {
    exports.connection = res;
});

然后在main.js文件中,只需简单地需要connection.js文件。

但这不是一个好习惯,因为如果您的诺言失败或花费了太多时间来解决,并且在解决诺言之前使用了诺言,则可能会导致错误。

答案 3 :(得分:0)

您应该使用Promise函数

promise.js

export  function get_data(){
  var get_data= new Promise(function(resolve, reject) {
     //do your stuff 
      return resolve('success');
    }).catch(function () {
      return reject('err');
    });
  
   });
 //return promise 
  return get_data;
}

导入

import * as data from './mypromise'


data.get_data().then((reuslt)=>{
console.log(result)})